我有以下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是函数的首选命名方式,而模块名是小写.