Discuss / Python / 请教一个问题

请教一个问题

Topic source

Jason_Yadi

#1 Created at ... [Delete] [Delete and Lock User]
def a():
  n = 0
  def b():
    n+=1
    print(n)
    return b
  return b

这样写会报错,提示local variable 'b' referenced before assignment,但是在函数a里面已经定义了n,再到函数b里面使用n,这时n不是a里面的n了吗? 是因为用了n+=1(n = n + 1)吗?那如果确实要用外层那个变量n,并自增,要怎么写呢?

Jason_Yadi

#2 Created at ... [Delete] [Delete and Lock User]

使用dict或list等引用类型的可以实现,但是不明白上面这个问题的原理。是因为 n = n+1 把n给重新定义了吗?

因为int类型不是默认全局变量,外层函数的int变量如果要被内层函数引用要声明nonlocal a,表明这里的a并不是函数b的本地变量


  • 1

Reply