UnboundLocalError
Topic sourcedef createCounter(): L = [0] def counter(): L[0] = L[0] + 1 return L[0] return counter
这个函数里 L=[0]
为什么不是一个局部变量,counter()函数仍能调用呢?
为什么呢?
L[0] = L[0] + 1
不也重新赋值了吗
你看如果我这样写也没有报错:
def createCounter(): l=[0] def counter(): l=[1] return l return counter
- 1
拿笔小星
报错:
这是因为,当你在当前作用域中的给变量赋值时,该变量将成为该作用域的局部变量,并在外部范围中隐藏任何类似命名的变量。
所以在执行
i = 1 + i
的时候。因为i被重新赋值了,所以i的作用域编程counter函数范围。同时将它原来在createCounter函数范围的同名变量i消除。然后,执行1 + i的时候就出错了,此时i还没有定义呢!所以报错:UnboundLocalError: local variable 'i' referenced before assignment
。参考