Python包和模块的导入 - QLGQ/learning-python GitHub Wiki
模块和命名空间
一般来说,Python程序往往由多个模块文件构成,通过import语句连接在一起。每个模块文件是一个独立完备的变量包,即一个命名空间。一个模块文件不能看到其他文件定义的变量名,除非它显示地导入了那个文件,所以模块文件在代码文件中起到了最小化命名冲突的作用。因为每个文件都是一个独立完备的命名空间,即使在他们拼写相同的情况下,一个文件的变量名是不会与另一个文件中的变量冲突的。
注意:import VS from:应该指出,from语句在某种意义上战胜了模块的名称空间分割的目的,因为from把变量从一个文件复制到另一个文件,这可能导致在导入的文件中相同名称的变量被覆盖(并且,如果发生这种情况的话,不会为你给出警告)。这根本上会导致名称空间重叠到一起,至少在复制的变量上会重叠。
模块和包
模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的Python文件(文件名:test.py,对应的模块名:test)。
包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py文件
)。
模块的分类:
* 内置模块
* 自定义模块
* 第三方模块(需要安装才能使用)
注意:Python中的模块,在其他语言中叫做类库。
模块和包导入的方式
导入模块中函数的方式
- import 模块名
- 使用时:模块名.函数名()
- from 模块名 import 函数名
- 使用时:函数名()
- from 模块名 import *
- 使用时:函数名()
- from 模块名 import 函数名 as 新函数名(自定义)
- 使用时: 新函数名() # 原来的函数名将失效
可以在模块中定义一个变量__all__:
使用__all__的影响:后面的[]里面写什么函数名,使用from 模块名 import *
方式导入时导入什么,如果没有定义__all__这个变量,将全部导入。(__all__仅限于from 模块名 import *
这种导入方式)
导入包中函数以及模块的方式
- from 包名 import 模块名
- 使用时:模块名.函数名()
- from 包名.模块名 import 函数名
- 使用时:函数名()
- import 包名.模块名
- 使用时:包名.模块名.函数名()
- from 包名 import *
- 前提是:将__init__文件中写入__all__变量(写入方式同模块导入的写入方式),变量当中写入哪个模块则导入哪个模块,不写则什么都不会导入。
- 使用时:模块名.函数名()
- import 包名
- 前提是:在包里面的__init__.py文件里写入
from . import 模块名
,__init__.py里面导入哪个模块,通过本方式就能使用哪个模块。 - 使用时:模块名.函数名()
- 前提是:在包里面的__init__.py文件里写入
- import 包名
- Python2当中可以在__init__.py文件中写入
import 模块名
,通过 import 包名 就可以导入__init__.py文件中写入的那个模块名。(此方法仅限于Python2) - 使用时4:模块名.函数名()
- Python2当中可以在__init__.py文件中写入
目录
- .:代表当前目录
from . import 模块名
代表的意思是:从当前目录中导入模块from .模块名 import 函数名
代表的意思是:从当前目录中的模块中导入函数
- ..:代表父目录
- /:代表根目录