一、导入的机制:
import 指令运行时执行并载入文件
二、导入的过程:
1、查找模块路径 按模块搜索路径
2、编译成字节码(如果必要的话)
①缓存以提高效率
②当字节码旧于源文件或者版本有差异时重新编译
③隔离存储于__pacache__目录
3、运行代码构造其定义的对象
三、导入后,模块搜索路径
1、程序主目录(常用)
2、系统环境变量 PYTHONPATH 设定的目录
3、标准库的目录
4、任意.pth文件内容指定的目录(极少用)
5、在 site-packages 目录下安装的第三方扩展
四、导入的关键字
1、import:导入整个模块
也可以用from aaa import * #也是导入模块下所有成员,等价于import aaa
2、from ... import ... :从模块获取特定成员
①场景:两个模块下都有同样的方法,比如product模块下有func()方法,utils模块下也有func()方法,那么如果在控制台下导入,后导入的就会把先导入的覆盖。
product.py
def get_product_list():
print('获取所有产品列表...')
def func():
print('Product...')
utils.py
def func():
print('Hello utils...')
②在控制台中输入:
from product import func
from utils import func
执行后,就会一直输出Hello utils,即先导入的product模块的func被后导入utils模块的func覆盖了。
③如果解决上面的问题?,则可以用 as 分别给取个别名,如下:
from product import func as pfunc
from utils import func as ufunc
3、importlib.reload(模块)
导入只执行一次(如果被导入的文件发生变化,在同一个控制台窗口下,引用的还是之前导入的内容。
解决方法:可以使用 importlib.reload(模块)
①不终止Python代码的情况下重新载入模块代码
②reload()函数参数必须为模块,而非载入对象名称:
reload(模块名称) #括号内必须是模块名称,而不是模块里的特定成员或者对象名称
网友评论