如何将全局变量传递给另一个函数调用的函数

时间:2012-05-08 06:47:51

标签: python function global-variables

在下面的例子中,我想找出导致异常的原因 执行"NameError: global name 'MATRIX' is not defined"test.fun1()

非常感谢。

class test:
    MATRIX = []

    @staticmethod        
    def fun1():
        global MATRIX
        test.fun2(MATRIX)

    @staticmethod
    def fun2(MATRIX):
        MATRIX.append(2)

test.fun1()    
print test.MATRIX

2 个答案:

答案 0 :(得分:3)

您的MATRIX不是全局的,它是一个类属性,请尝试这样:

class test:
    MATRIX = []

    @classmethod     # Note classmethod, not staticmethod   
    def fun1(cls):   # cls will be test here
        test.fun2(cls.MATRIX)

    @staticmethod
    def fun2(MATRIX):
        MATRIX.append(2)

test.fun1()    
print test.MATRIX

答案 1 :(得分:2)

导致错误"NameError: global name 'MATRIX' is not defined",因为代码中没有名为MATRIX的全局变量。

在您的代码中 MATRIX 不是全局变量,而是类属性。全局变量将使用如下:

MATRIX = []

class test:

    @staticmethod
    def fun1():
        test.fun2(MATRIX)

    @staticmethod
    def fun2(l):
        l.append(2)

    @staticmethod
    def reset():
        global MATRIX
        MATRIX = []

test.fun1()
print MATRIX
# >>> [2]
test.fun1()
print MATRIX
# >>> [2, 2]
test.reset()
print MATRIX
# >>> []