使用Python 2.7。试图从counter
中的testlib.py
导入全局变量uselib.py
,但在0
中的以下程序中返回结果为uselib.py
,为什么2
不归还?感谢。
testlib.py ,
counter = 0
class Foo:
def __init__(self):
pass
def Count(self):
global counter
counter += 1
uselib.py ,
from testlib import Foo
from testlib import counter
f = Foo()
f.Count()
g = Foo()
g.Count()
print counter # output is 0 other than 2
答案 0 :(得分:1)
根据Python文档:
import语句结合了两个操作;它搜索命名模块,然后将搜索结果绑定到本地范围内的名称。
因此,这意味着您导入的counter
只是一个副本,并且标签已导入当前范围,这意味着修改不会发生在右侧{{1} }}
导入counter
时,Python会找到该模块,从counter
获取counter
,然后复制到testlib
。该副本未被修改,因为您要uselib
调用Count
中的变量,而不是通过导入添加到本地范围的副本。这意味着您打印的初始状态为testlib
,但它永远不会被修改,打印为0.要正确打印,请使用:
counter
答案 1 :(得分:1)
from testlib import counter
引入了counter
的副本。由于整数类型是不可变的,因此导入的counter
不会受testlib
内的操作影响。
你可以尝试这样的事情:
import testlib
print testlib.counter