#闭包:在一个函数的内部定义了另一个函数,外部的我们叫他外函数,内部的我们叫他内函数。 def wai(): mylocetion = [0] def nei(): mylocetion[0] += 1 print(mylocetion[0]) return mylocetion return nei#外函数返回内函数,并结束自己,此时发现内函数要使用自己的零时变量,于是外函数的零时变量被保存。(本来函数结束后应该删除) #此变量会一直存在,直到删除 t1 = wai() print(type(t1))#-----<class 'function'>,t1实际上可就是内函数,此函数带有外函数无法删除的零时变量 t1() t1() t1()#每一次调用内函数,都是一次内函数的执行消亡,但是其使用的外函数的闭包变量(即应内函数调用无法删除的变量)只有一份,因此闭包变量被更改并保存。 def outer(x): def inner(y): nonlocal x x+=y#x = x + 1---------当在内函数中重新定义(创建)x 变量时,函数默认x是局部变量。 return x return inner a = outer(10) print(a(1)) print(a(3)) #在python中,一个函数可以随意的读取全局数据(在其内部没有此数据的情况下,他会向上一级查找),但是其要修改上一级的数据,则此数据必须为可修改的:(两种实现方法) # 1:global 声明全局变量 # 2:全局变量是可变类型数据的时候可以修改 # 3:用nonlocal 关键字声明 一个变量, 表示这个变量不是局部变量空间的变量,需要向上一层变量空间找这个变量。---注:只可以在闭包中使用 #跑步记步程序 def func(pep): start = 0 def nei(fc): nonlocal start name = pep start += fc print(pep + " he had run %d ! "%start) return nei pep1 = func("小明") pep2 = func("小红") pep3 = func("小王") pep1(1) pep1(3) pep1(5) print("---------------------------------") pep2(8) pep2(10) pep2(15) print("---------------------------------------") pep3(6) pep3(18) pep3(21) #结果===================================================== 小明 he had run 1 ! 小明 he had run 4 ! 小明 he had run 9 ! --------------------------------- 小红 he had run 8 ! 小红 he had run 18 ! 小红 he had run 33 ! --------------------------------------- 小王 he had run 6 ! 小王 he had run 24 ! 小王 he had run 45 !
python----3.15--闭包
最新推荐文章于 2023-02-21 11:17:06 发布