模块与包
一、什么是模块?
模块是工具箱,常用的通用的代码 规整到一起,可以供有需要的人调用。 这就是模块。
模块的最小单位是python文件,要成为可以被调用的模块 就要遵循变量的命名方式来给模块命名。(按照变量命名规则命名的Python文件 就可以作为模块 导入使用)
模块也可以是文件夹,文件夹下面有Python文件。文件夹下面有一个__init__.py的文件。这样的文件夹,我们也叫作包。(一个Python文件是一个模块,一个包 也可以是一个模块。包是特殊的文件夹,里头有__init__.py文件)
有一种情况下,文件夹里头没有__init__也可以导入包和模块,就是bin 目录下面是入口文件,入口文件已经把整个项目放到 sys.path中了,程序从入口文件运行。这个时候文件夹里头没有__init__也是可以的。
模块按照来源不同可以分为三类:
内置模块: Python解释器提供
第三方模块:Python大牛写的,发布到网上供大家使用的,可以去第三方库下载。
自定义模块:自己写的
二、模块导入规范
import 内置模块1
import 内置模块2
import 第三方1
import 自定义1
import 自定义2
三、一个Python文件的两种用途
1.Python文件当做程序运行
print(__name__) # __main__ Python文件的内置属性__name__的值是 __main__
2.Python文件当做模块导入
print(__name__) # 某块名 Python文件的内置属性__name__的值是 __main__
所以 我们可以利用__name__,实现下面的操作
在一个.py的模块文件中,有些代码,我们是只有文件被执行的时候才希望它运行的。文件被导入的时候,我们不希望这部分代码别执行。
那么我们就可以加上if 判断,只有 __name__ == ‘__main__‘的时候,下面的代码才执行。
if __name__ == ‘__main__‘:
print('这些代码,我不希望导入我的人能执行哟,它们只会在.py文件被执行的时候才会被执行')
四、编写模块规范
“The module is used to ...” # 编写文档注释
import sys # 导入模块
x = 1 # 定义全局变量,如非必要,最好定义成局部变量
class Foo: # 定义类, 并写好类注释
‘Class Foo is used to ...’
pass
def test(): # 定义函数,并写好函数注释
‘Function test is used to ...’
pass
if __name__ == '__main__': # 主程序
test() # 在被当做脚本执行时,执行此处的代码
四、模块的导入
from package1.package2.module import func
直接执行 func()
import packge1.package2.module
执行 packge1.package2.module.func()