关于 import
1 import
import可用于导入一个Python的标准模块,包括.py文件或带有__init__.py的文件目录。
在Python中,import一个模块后,若再次import该模块,不会重新加载指定模块,而是把该模块的内存地址给引用到本地环境变量。即其id是相同的。
首先定义一个foo模块
1 print('This is foo') 2 def act(): 3 print('This is foo function: act')
然后在另一个模块中导入foo,
1 import foo 2 print('First time import "foo", id is', id(foo)) 3 print('This is impor') 4 import foo 5 print('Second time import "foo", id is', id(foo)) 6 foo.act()
运行结果
This is foo First time import "foo", id is 57152600 This is impor Second time import "foo", id is 57152600 This is foo function: act
最终两次显示的id是相同的,且不显示foo中的打印语句,说明其内存地址没变,只是本地引用。
2 reload
利用importlib的reload函数对已经加载的模块进行重新加载,一般用于原模块有变化的特殊情况下,reload前该模块必须已经import过。
1 import importlib 2 import foo 3 importlib.reload(foo)
3 __import__
__import__与import的功能相同,但是__import__是一个函数,只接受字符串,其实import语句也是调用这个函数进行工作的。
<import sys> equals to <sys = __import__(’sys’)>
调用可以通过del删除上次的import完成unimport
1 import sys 2 __import__('foo') 3 print(sys.modules['foo']) 4 del sys.modules['foo'] 5 __import__('foo') 6 __import__('foo') 7 ''' 8 # euqal to "from foo import act" 9 f = __import__('foo', fromlist=('act',)) 10 f.act() 11 '''
Note: import 只进行一次加载的特性,可以用于实现单例模式。