美文网首页
import和from...import... 导入模块

import和from...import... 导入模块

作者: 冰封1999 | 来源:发表于2019-08-22 17:54 被阅读0次

一、导入的机制:

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(模块名称)     #括号内必须是模块名称,而不是模块里的特定成员或者对象名称

相关文章

网友评论

      本文标题:import和from...import... 导入模块

      本文链接:https://www.haomeiwen.com/subject/urlosctx.html