为什么来自。。。在Python中,导入似乎在导入时绑定到值?
我读过的所有Python文档似乎都表明,除了副作用之外,如果导入模块A然后引用A.A,那么引用的变量与“从导入A”中编写的变量相同 然而,这里的情况似乎并非如此,我也不确定发生了什么。我正在使用Python 2.6.1 如果创建模块alpha.py:为什么来自。。。在Python中,导入似乎在导入时绑定到值?,python,Python,我读过的所有Python文档似乎都表明,除了副作用之外,如果导入模块A然后引用A.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('.'))
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
为什么会这样?来自。。。导入…始终立即绑定,即使以前的导入仅导入模块/包 编辑: 对比如下:
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
python-mdisbravo.py执行该命令,以查看编译期间代码发生了什么变化。
我发现这个博客对于理解引擎盖下发生的事情很有用 啊。我认为“import”将变量名从模块导入本地名称空间,但听起来好像它将本地名称空间中的相同名称绑定到导入变量的值。我不确定这是跛脚的还是我太跛脚了以至于没有意识到这是不对的。Python本身没有“变量”,只有“名称”。