python - 'from modulename import function/variable' 是否将整个模块放入 sys 模块字典中?

标签 python python-3.x python-import

当我们执行 import modulename 时,函数和变量会在 modulename 命名空间(全局)中设置。例如,对变量所做的任何更改都是全局可见的。

当我们执行 from modulename import functionvariable 时,该函数或变量将加载到调用模块命名空间(本地)中。对变量的任何更改都不是全局的,而是仅在调用模块内。

但是,是否使用 from modulename import functionvariable - 将整个模块放入 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/

相关文章:

python - 如何在 NumPy 中有效地找到光滑多维数组的局部最小值?

python - 如何在不导入 python 模块的情况下检查运行时是否有效?

python - 如何使用argv将模块加载到python中

python - Boto3 使用旧凭据

python - 为什么我得到 : invalid syntax error on python3

python - 读取文件直到python中的特定字符

python datetime gets object has no attribute today错误

python - Rail Fence Cipher-寻找更好的解决方案

Python:循环 pd.DataFrame 中的行时出现 'ValueError: can only convert an array of size 1 to a Python scalar'

python - 将 2D 数组合并到 3D 数组