Python 将文本追加到全局变量

Python 将文本追加到全局变量,python,append,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 ho

我在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()

>>> def method1():
...     global v
...     v="hi "
... 
>>> def method2():
...     global v
...     v +="go home"
... 
>>> method1()
>>> method2()
>>> v
'hi go home'

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
这样做的好处是,您可以创建多个字符串并独立地操作它们。例如:

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
最后,在
v2
中有
“hi-go-home-go-home”
,但在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()

除了非常有限的应用之外,全局变量是非常不受欢迎的。你想不想在没有全局变量的情况下实现这一点?你的函数名也很混乱
method1
method2
听起来应该是类的方法,而不是顶级函数。另外,为什么要在
method1
中添加
全局v
?如果你知道这是必要的,为什么你不想用
方法2
?如果你不知道这是必要的,为什么要把它放在第一位?为什么我不能在连接后打印它?还有其他我可以做的吗?@user1315906,你可以
打印它。