Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么来自。。。在Python中,导入似乎在导入时绑定到值?_Python - Fatal编程技术网

为什么来自。。。在Python中,导入似乎在导入时绑定到值?

为什么来自。。。在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('.'))

我读过的所有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('.'))

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本身没有“变量”,只有“名称”。