导入模块¶
在Python中使用关键字import导入模块, 其用法主要有:
import ...from ... import ...
import ...¶
把指定的模块作为一个整体导入到当前作用域中, 使用模块中的成员(变量, 函数或类)时, 需要用模块名作为前缀.
from ... import ...¶
把一个模块中的指定成员(变量, 函数或类)导入到当前作用域中, 导入后, 在当前作用域中可以直接使用导入的成员(不需要使用模块名作为前缀).
导入模块的本质¶
- 使用
import ...导入模块的本质就是: 将.py文件中的全部代码加载到内存并执行, 然后将整个模块内容赋值给与模块同名的变量, 该变量的类型是module, 而在该模块中定义的所有程序单元都相当于该module对象的成员; - 使用
from ... import ...导入模块中的成员, 其本质是: 将.py文件中的全部代码加载到内存并执行, 然后只导入指定的变量, 函数或类, 并不会将整个模块导入.
总结¶
- 如果在一个导入语句中导入多个模块/包, 它们之间用逗号分隔, 但通常不建议这么做, 建议每个导入语句只导入一个模块/包;
- 导入语句可以出现在程序中的任何位置, 但同一个模块只会被导入依次, 不管执行了多少次
import; - 不论是
import还是from ... import ..., 不论是导入模块还是导入包, 都不会递归导入; - 导入时, 需要注意导入的名称和当前作用域中的名称之间可能的冲突问题;
- 导入一个模块, 就是导入模块的内容, 模块的内容存储在
.py文件中, 所以导入模块就是导入相应的.py文件; 对于一个包, 它对应的.py文件就是它的__init__.py文件, 所以导入一个包, 就是到__init__.py文件; - 导入一个包时, 只是导入该包的
__init__.py文件, 不会递归导入该包中的模块和子包; from ... import *语句会导入内容中(包的__init__.py文件中或模块文件中)的__all__变量定义的所有名称, 如果没有定义__all__变量, 则导入所有没有以两个下划线开头的名称(应该尽量避免使用这种导入方式).