Python包¶
什么是包?¶
和模块一样, 包也是一种代码归集的方法, 可以将模块或其他的包组织在一个包中.
简单理解, 包就是文件夹.
注解
在Python 2.x中规定, 作为包的目录下必须有一个__init__.py文件, 但在Python 3.x中, 该文件不是必须的.
包是一个包含多个模块的文件夹, 它的本质依然是模块, 包中也可以包含其它的包.
同模块一样, 包也会引入自己的作用域.
导入包¶
包本质上还是模块, 因此导入模块的语法同样也适用于导入包.
导入包的方法可以总结为以下三种:
import package[.module]from package import modulefrom package.module import member
import package[.module]
通过此语法格式导入包或包中的模块, 把包或模块的命名空间作为一个整体导入到当前作用域中了,
在使用包或模块中的成员(变量, 函数, 类)时, 需要添加package[.module]作为前缀.
当然, 如果使用as给package[.module]起一个别名的话, 就可以直接使用这个别名作为前缀了.
注意
import package, 直接导入包名, 并不会将包中所有的模块导入到程序中, 它的作用仅仅是导入并执行包下的__init__.py文件.
对于一个模块, 有对应的.py文件; 对于一个包, 它的.py文件就是__init__.py.
from package import module
使用此语法格式导入包中的模块后, 包中的模块的命名空间被作为一个整体导入到当前作用域, 在使用模块成员时不需要带包名前缀, 但需要带模块名前缀.
from package import *的作用和import package一样, 都只是将该包__init__.py文件导入并执行.
from package.module import member
使用此语法格式将package.module中的指定成员(变量, 函数或类)导入到当前作用域.
通过该种方式导入的成员, 在使用时可以直接使用(不带包名或模块名前缀).
from package.module import *表示导入package.module中的所有成员(不建议).