ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

『无为则无心』Python函数 — 37、Python中的包

2022-01-25 22:01:43  阅读:165  来源: 互联网

标签:__ 包名 Python 37 文件夹 模块 无为 my


目录

包是将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为__init__.py 文件,那么这个文件夹就称之为包(包就是一个文件夹)。

换句话说,包也是一个模块,是一个更高级的模块。当我们模块中代码过多时,或者一个模块需要被分解为多个模块时,这时就需要使用到包,普通的模块就是一个py文件,而包是一个文件夹。引入了一个包,那包中的模块也能被引用了。

1、制作包

(1)创建包

[New] —> [Python Package] —> 输入包名 —> [OK] —> 新建功能模块

  • [New] —> [Python Package]
    image
  • 输入包名 —> [OK](或者回车)
    image
  • 可以看到项目目录导航窗口中,看到我们创建的包和包中的__init__.py 文件。
    image

    注意:新建包后,包内部会自动创建__init__.py文件,这个文件控制着包的导入行为。

(2)在包内创建模块

1)新建包内模块:my_module1my_module2

[new] —> [Python File] —> 输入文件名

2)模块内代码如下

# my_module1
print(1)


def info_print1():
    print('my_module1')
# my_module2
print(2)


def info_print2():
    print('my_module2')

2、导入包

方法一

# 导入
import 包名.模块名

# 调用包中模块的功能
包名.模块名.目标

示例:

# 导入包中模块--包名.模块名
import my_package.my_module1

# 调用功能--包名.模块名.功能()
my_package.my_module1.info_print1()

方法二

# 导入包中功能
from 包名 import * 或者 功能名1、2、3...

# 调用模块功能
模块名.目标

编辑__init__.py文件中添加__all__ = []

__all__ = ['my_module1']

示例:

# 导包
from my_package import *

# 调用__all__列表中定义模块的功能。
my_module1.info_print1()

注意:

必须在__init__.py文件中添加__all__ = [],控制允许导入的模块列表。

如果没有定义在__all__列表中的模块,无法导入到指定文件中。

3、关于__pycache__文件夹说明

在包中还有一个叫__pycache__的文件夹,__pycache__ 是模块的缓存文件夹。

Python代码在执行前,需要被解析器先转换为机器码,然后再执行,所以我们在使用模块(包)时,也需要将模块的代码先转换为机器码然后再交由计算机执行,而为了提高程序运行的性能,Python会在编译过一次以后,将代码保存到一个缓存文件中,这样在下次加载这个模块(包)时,就可以不再重新编译而是直接加载缓存中编译好的代码即可(避免重复解释)。

__pycache__文件夹可以删除,但是以后在调用包中的模块时,还会重新解释模块,还会把解释器处理完的代码保存在__pycache__文件夹中。

4、Python标准库

为了实现开箱即用的思想,Python中为我们提供了许多模块的标准库,在这个标准库中,有很多很强大的模块,提供我们可以直接使用,并且标准库会随Python的安装一同安装。

模块、包和标准库的关系

  • 模块:就是一个.py文件,相当于一个工具类。
  • 包:将有联系的模块组织在一起,即放到同一个文件夹下,方便控制管理。
  • 标准库:官方定义好的,具有相关功能模块的集合。如ossys

总结:

这三个概念实际上都是模块,只不过是个体和集合的区别。

第三方库:就是由其他的第三方机构,发布的具有特定功能的模块。

标签:__,包名,Python,37,文件夹,模块,无为,my
来源: https://www.cnblogs.com/liuyuelinfighting/p/15844601.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有