python import-ed变量尽管正在更改,但保持相同的值

我有以下python代码,我认为它的行为很奇怪:

导入模块:

# ChangeVar.py
def Print1():
    print "1--"

def Print2():
    print "2--"

Print=Print1

def Change():
    global Print
    Print=Print2

主模块:

#UseVar.py
from ChangeVar import *

Print()
Print()

Change()


Print()
Print()

我希望下面的代码能够打印出以下内容:

1--
1--
2--
2--

但是我得到的是:

1--
1--
1--
1--

有人可以指出我在python参考的正确部分还是解释为什么我没有得到预期的行为?

谢谢,

尤利安

解决方法:

Python的全局变量仅对模块全局.

import ChangeVar

ChangeVar.Print()
ChangeVar.Print()

ChangeVar.Change()

ChangeVar.Print()
ChangeVar.Print()

但是,这将起作用,重新考虑对global的使用-这是普遍的不良做法.应该有一种更清洁的方式来做您想要的事情.考虑在模块内部使用一个类.

# ChangeVar.py
class ChangeVar(object):
    def __init__(self):
        self.Print=self.Print1

    def Print1(self):
        print "1--"

    def Print2(self):
        print "2--"

    def Change(self):
        self.Print=self.Print2

如此使用:

#UseVar.py
from ChangeVar import ChangeVar

cv = ChangeVar()
cv.Print()
cv.Print()

cv.Change()

cv.Print()
cv.Print()

我还要指出的是,根据Python style guide,小写_with_underscores是函数的首选命名方式,而模块名是小写.

上一篇:引用对象方法时是否应将其存储在变量中? (JavaScript)


下一篇:清理PHP中合法变量名称的字符串