鉴于以下示例,我想找出导致异常的原因 执行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
# >>> []