我读过的所有Python文档似乎表明,除了副作用之外,如果导入模块A然后引用Aa,则引用相同的变量,就好像你写了“来自A import a”。 / p>
然而,这似乎并非如此,我不确定发生了什么。我正在使用Python 2.6.1。
如果我创建一个模块alpha.py:
bravo = None
def set_bravo():
global bravo
bravo = 1
然后创建一个导入模块的脚本:
import sys, os
sys.path.append(os.path.abspath('.'))
import alpha
from alpha import bravo
alpha.set_bravo()
print "Value of bravo is: %s" % bravo
print "Value of alpha.bravo is: %s" % alpha.bravo
然后我得到了这个输出:
Value of bravo is: None
Value of alpha.bravo is: 1
为什么?
答案 0 :(得分:5)
from ... import ...
始终立即绑定,即使之前的import
仅导入了模块/包。
修改强>
对比以下内容:
import alpha
alpha.set_bravo()
from alpha import bravo
print "Value of bravo is: %s" % bravo
print "Value of alpha.bravo is: %s" % alpha.bravo
答案 1 :(得分:0)
python -m dis bravo.py执行该操作以查看编译期间代码发生了什么。 我发现这个博客对于了解幕后发生的事情非常有用。 http://late.am/post/2012/03/26/exploring-python-code-objects