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是一个模块,而不是包名的前缀)。