Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否';从modulename导入函数/变量';是否将整个模块放入sys modules字典?_Python_Python 3.x_Python Import - Fatal编程技术网

Python 是否';从modulename导入函数/变量';是否将整个模块放入sys modules字典?

Python 是否';从modulename导入函数/变量';是否将整个模块放入sys modules字典?,python,python-3.x,python-import,Python,Python 3.x,Python Import,当我们导入modulename时,函数和变量在modulename命名空间(全局)中得到设置。例如,对变量所做的任何更改都是全局可见的 当我们从modulename导入函数或变量执行操作时,该函数或变量将加载到调用模块名称空间(本地)中。对变量的任何更改都不是全局的,而是仅在调用模块中进行的 但是,使用modulename中的导入函数或变量,是否将整个模块放入sys模块中?或者只导入函数/变量?即使只从模块中导入一组有选择的名称,该模块仍然需要对要导入的指定名称进行完全编译和执行,因此,使用fr

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

当我们从modulename导入函数或
变量
执行
操作时,该函数或变量将加载到调用模块名称空间(本地)中。对变量的任何更改都不是全局的,而是仅在调用模块中进行的


但是,使用modulename中的
导入函数
变量
,是否将整个模块放入sys模块中?或者只导入函数/变量?

即使只从模块中导入一组有选择的名称,该模块仍然需要对要导入的指定名称进行完全编译和执行,因此,使用
from module_name import variable_name
确实会将整个模块放入模块缓存中

由于导入的模块缓存在Python中的
sys.modules
dict中,因此可以通过输出导入前后
sys.modules
键之间的差异来验证行为:

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']
3.141592653589793
然后,您可以访问
math
模块中的其他变量,即使您仅从
math
导入
sqrt

print(sys.modules['math'].pi)
这将产生:

['math']
3.141592653589793

不可避免地,整个事情。基本上是因为暂停问题,所以整个导入的模块运行,只有函数/变量进入调用者名称空间(本地),而其余的都在被调用者名称空间(全局)?当您说整个模块被放入sys.modules时,sys.modules到底持有什么?是模块名还是模块中的每个函数和变量?整个模块表示模块对象本身。我已经更新了我的答案以反映这一点。谢谢。只是古玩-像这样使用-sys.modules['math'].pi是一个好的实践吗?不是一个好的实践。您应该简单地使用
from math import pi
语句来实现这一点。在您的示例中,sqrt是局部的,pi是全局的,对吗?所以,如果它是一个变量而不是一个函数,那么对pi的更改将是局部的,而对sqrt的更改将是全局可见的?