将文本附加到全局变量

时间:2013-08-13 03:47:22

标签: python append

我在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()中附加一些文字并显示它。

2 个答案:

答案 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()