Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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 使用全局变量有可能在导入过程中更改模块行为?_Python_Import_Module_Global Variables - Fatal编程技术网

Python 使用全局变量有可能在导入过程中更改模块行为?

Python 使用全局变量有可能在导入过程中更改模块行为?,python,import,module,global-variables,Python,Import,Module,Global Variables,到目前为止,使用全局变量的一个缺点是: “有可能在导入期间更改模块行为,因为模块级变量的赋值是在导入模块时完成的” 我对这句话的理解是,“导入模块A的模块级变量影响导入模块A的模块B的行为”,这在语义上是否正确 如果是,则A中的任何模块级变量var只能通过A.var在B中访问。我不明白为什么导入A会改变B的行为 如果我误解了这个句子,正确的解释是什么 谢谢 我相信有一个导入缓存,可以避免在单个程序执行期间多次重新导入同一模块 但是,例如,模块级全局变量可以设置为由time.time()或类似变量

到目前为止,使用全局变量的一个缺点是:

“有可能在导入期间更改模块行为,因为模块级变量的赋值是在导入模块时完成的”

我对这句话的理解是,“导入模块
A
的模块级变量影响导入模块
A
的模块
B
的行为”,这在语义上是否正确

如果是,则
A
中的任何模块级变量var只能通过
A.var
B
中访问。我不明白为什么导入
A
会改变
B
的行为

如果我误解了这个句子,正确的解释是什么


谢谢

我相信有一个导入缓存,可以避免在单个程序执行期间多次重新导入同一模块


但是,例如,模块级全局变量可以设置为由time.time()或类似变量播种的随机数。如果将随机数用作除数,有时在导入模块时,会得到零除法,有时则不会。在考虑我的问题一段时间后,我有以下想法

考虑到以下三个文件:

文件1:foo.py

x = 1
文件2:bar.py

import foo
foo.x = 2
def func():
  pass
文件3:main.py

import foo
foo.x = 3

# Now I need some function in bar...    
import bar
bar.func()

print foo.x
只浏览main.py,很难想象foo.x为什么会是2。这是因为当main.py导入bar时,bar.py中foo.x的值正在更改


这可能不是最好的答案。欢迎您纠正我或添加更多解释。

在您的情况下,即使随机数不是模块级变量,也可以获得除零异常。导入行为在这里起作用吗?谢谢。我认为这句话指的是
from x import*
可能是吗?可能不是这样,因为在介绍本文讨论的主题之前,样式指南讨论了“from x import*”的缺点(给出x是一个模块,而不是包名的前缀)。