使用import 导入模块时,系统做了以下几步:
1.导入import后面紧跟的模块
2.将后面的名字指向该模块
例如:import os
系统先是导入了os.py文件,然后将os指向了os.py文件,然后就可以用os.函数名来访问os.py里面的函数和属性
使用import导入模块有几种方式:
1.import 模块名
推荐使用方式,尽管调用模块内的属性和函数时会麻烦一点,但避免了多模块导入时,修改属性导致的混乱。
2.from 模块名 import *
3.from 模块名 as 别名
接下来聊聊前面说的多模块导入时容易导致的模块内属性的混乱
这是第一个文件test1.py
a = 10
这是第二个文件test2.py
import test1
test1.a = 20
这是第三个文件test3.py
import test1
import test2
print(test1.a)
看起来似乎跟test2.py没有什么关系,但实际上是有关系的,最后输出的结果是20,并不是test1.py里的10。这其中的原因是导入test2.py时,test2.py对test1.py中的属性进行修改,在test3.py中产生了影响,影响的结果就是调用test1.a时,显示的是修改过的属性。但是如果将test3.py的第一行改为from test1 import *,此时调用test1中的属性a时,就不能用test1.a,而是用a,此时的结果就变成了10.
上述结果看似没有什么用处,但实际上意义很大,因为实际开发中,会经常使用多模块同时导入,加入我们在test1.py中放的是数据,test2.py中存放处理数据的方法,然后需要在test3.py中使用处理后的数据,此时如果使用from 模块名 import * 这种方法导入就会产生一种错觉:明明处理过数据,但程序运行结果却是未经处理的数据,此时bug应该就在模块导入的地方。