2

我在 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()并显示它。

4

2 回答 2

6

声明v为全局:

>>> def method1():
...     global v
...     v="hi "
... 
>>> def method2():
...     global v
...     v +="go home"
... 
>>> method1()
>>> method2()
>>> v
'hi go home'
于 2013-08-13T03:49:26.787 回答
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,但你仍然进入"hi "了 v1。使用全局变量,一次只能有一个值;一旦你改变它,你就失去了旧的价值。


还有其他可能的设计来组织组件并在它们之间共享或传递状态。例如,您可以将状态(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()
于 2013-08-13T04:08:30.797 回答