当我们执行 import modulename
时,函数和变量会在 modulename 命名空间(全局)中设置。例如,对变量所做的任何更改都是全局可见的。
当我们执行 from modulename import function
或 variable
时,该函数或变量将加载到调用模块命名空间(本地)中。对变量的任何更改都不是全局的,而是仅在调用模块内。
但是,是否使用 from modulename import function
或 variable
- 将整个模块放入 sys 模块中?或者只有导入的函数/变量?
最佳答案
即使您只从模块中导入一组选定的名称,模块仍然需要完全编译和执行才能导入指定的名称,所以是的,使用 from module_name import variable_name
确实将整个模块放入模块缓存中。
由于导入的模块缓存在Python的sys.modules
字典中,可以通过输出前后sys.modules
的key的不同来验证行为进口:
import sys
modules = sys.modules.copy()
from math import sqrt # selectively import just sqrt from the math module
print(list(sys.modules.keys() - modules.keys()))
这个输出:
['math']
然后您可以访问 math
模块中的其他变量,即使您只从 math
导入了 sqrt
:
print(sys.modules['math'].pi)
这个输出:
3.141592653589793
关于python - 'from modulename import function/variable' 是否将整个模块放入 sys 模块字典中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57715648/