我在Python中遇到全局变量问题;我已经在方法中定义了一个全局变量,我试图从另一个方法向它添加一些文本。
方法1:
def method1():
global v
v="hi "
print v
方法2:
def method2():
print v # prints `hi`
v +="go home"
print v # doesn't append
我怎么称呼:
method1()
method2()
预期输出为hi go home
,但我没有得到预期的输出。
我该如何解决这个问题?我需要在method2()
中附加一些文字并显示它。
答案 0 :(得分:6)
将v
声明为全局:
>>> def method1():
... global v
... v="hi "
...
>>> def method2():
... global v
... v +="go home"
...
>>> method1()
>>> method2()
>>> v
'hi go home'
答案 1 :(得分:2)
falsetru的答案显示了你需要做些什么来完成这项工作:全局变量必须在每个函数中声明为全局变量,而不仅仅是一个函数。
然而,正如Brionus在评论中所说,这可能不是解决这个问题的最好方法。而不是全局变量,只需传递参数并返回值。例如:
def function1():
v = "hi "
print v
return v
def function2(v)
v += "go home "
print v
return v
v = function1()
v = function2(v)
这样做的好处是您可以创建多个字符串并独立操作它们。例如:
v1 = function1()
v2 = function1()
v2 = function2(v2)
v2 = function2(v2)
print v1
print v2
最后,"hi go home go home "
中有v2
,但您在v1中仍然有"hi "
。使用全局变量,一次只能有一个值;一旦你改变它,你就失去了旧的价值。
还有其他可能的设计用于组织组件以及在它们之间共享或传递状态。例如,您可以将状态(v
变量)包装在一个类中,并将该方法作为该类的实例方法:
class MyClass(object):
def method1(self):
self.v = "hi "
print self.v
def method2(self):
self.v += "go home "
print self.v
my_object = MyClass()
my_object.method1()
my_object.method2()