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



鉴于以下示例,我想找出导致异常的原因 执行test.fun1()"NameError: global name 'MATRIX' is not defined"

多谢。

class test:
    MATRIX = []
    @staticmethod        
    def fun1():
        global MATRIX
        test.fun2(MATRIX)
    @staticmethod
    def fun2(MATRIX):
        MATRIX.append(2)
test.fun1()    
print test.MATRIX

你的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

错误"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
# >>> []

相关内容

  • 没有找到相关文章

最新更新