为什么from ...导出似乎在Python中导入时绑定到值?

时间:2012-05-19 00:41:00

标签: python

我读过的所有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

为什么?

2 个答案:

答案 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