假设我有一个 Python 模块,名为 foo
,它有一个函数 bar()
以及模块内的全局变量 x = 'spam'
。 bar()
使用这个x来操作。
如果我导入foo
喜欢 import foo
,然后调用foo.bar()
,很明显会发生什么。
但是如果我导入 bar()
就这样:from foo import bar
,我打电话 bar()
,如果我还有一个变量 x
会发生什么在我的全局命名空间中?
foo.py
x = 'spam'
def bar():
print x
main.py
from foo import bar
x = 'eggs'
bar()
如果我将导入行替换为: from foo import bar, x
会怎样? ?
编辑:(在这两种情况下都会打印“垃圾邮件”,问题是为什么?)
最佳答案
函数是在创建时保留有关自身的各种信息的对象。
检查 bar.__module__
和 bar.__globals__
的值,你就会清楚它是如何工作的。
关于Python 模块范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21999871/