5

我读过的所有 Python 文档似乎都表明,除了副作用之外,如果您导入模块 A 然后引用 Aa,那么您引用的变量就像您编写“从 A 导入 a”一样。

但是,这里的情况似乎并非如此,我不确定发生了什么。我正在使用 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

这是为什么?

4

2 回答 2

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
于 2012-05-19T00:43:41.487 回答
0

python -m dis bravo.py 执行它以查看编译期间代码发生了什么。我发现这个博客有助于了解幕后发生的事情。http://late.am/post/2012/03/26/exploring-python-code-objects

于 2012-05-19T02:07:07.067 回答