sayangrtg 发表于 2023-2-17 15:22:44

函数local variable referenced before assignment

求教大神们!
def funB():
    num = 0
    def funA():
      num = 1 + 1
      return num
    return funA
或者
def funB():
    num = 0
    def funA():
      temp = num + 1
      return num
    return funA

都不会出错,而这样写就会出错,为什么呢?
def funB():
    num = 0
    def funA():
      num = num + 1
      return num
    return funA

a = funB()
a()
会出错。local variable 'num' referenced before assignment

isdkz 发表于 2023-2-17 15:37:56

因为你给 num 赋值的话就说明 num 是一个局部变量,但是局部变量不能在赋值之前使用

num = num + 1 是先完成右边的计算再赋值给左边,也就是你的 num 在赋值之前使用了,所以报错,

你得在 num = num + 1 之前加一个 nonlocal num 来说明 num 不是局部变量

def funB():
    num = 0
    def funA():
      nonlocal num
      num = num + 1
      return num
    return funA

a = funB()
a()
页: [1]
查看完整版本: 函数local variable referenced before assignment