Python 2.7全局变量问题

时间:2016-09-19 04:33:04

标签: python python-2.7

使用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

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