Discuss / Python / 闭包确实理解起来没那么容易,只能多阅读代码和看别人的思路。

闭包确实理解起来没那么容易,只能多阅读代码和看别人的思路。

Topic source

def creatCounter(): f = [0] def counter(): f[0] += 1 return f[0] return counter

闭包内能访问闭包外的变量,但不可以修改,除非用到nonlocal,同一个返回函数的对象重复执行的时候,仅重复执行闭包内的函数,闭包外的函数只执行一次。 f1 = creatCounter() f2 = creatCounter() print(f1(),f2()) 如果这样执行结果是1 1,如果print(f1(),f1()),结果就是1 2

def creatCounter(): num = 0 def counter(): nonlocal num num += 1 return num
return counter

nonlocal是在闭包内申明变量,表示这个变量不管在闭包内还是闭包外都可以修改。 f = creatCounter() print(f(),f())这样的结果也是1 2

谢谢,听完您的讲解,豁然开朗


  • 1

Reply