2021-08-26 Python之闭包
#闭包
在函数中提出的概念:
在外部函数中定义了内部函数,外部函数是有返回值的,返回值是内部函数名
内部函数还引用了外部函数的变量
格式:
def 外部函数():
……
def 内部函数():
……
return 内部函数
1 def func(): 2 a=100 3 def in_func(): 4 b=1 5 print(a,b) 6 7 return in_func 8 9 x=func() 10 print(x) 11 x()
#闭包的应用
当你调用func(2,3)---> a=2,b=3 --->in_func()内部函数中
--->返回内部函数(此时返回的内部函数已经记录了a,b的值)
1 def func(a,b): 2 c=1 3 def in_func(): 4 s=a+b+c 5 print('相加结果是:',s) 6 return in_func 7 8 ifunc=func(2,3) 9 ifunc() 10 11 ifunc1=func(4,5) 12 ifunc1() 13 14 print(ifunc) 15 print(ifunc1) #地址不同
#闭包的同级访问
1.闭包的缺点:作用域不明显,因为变量不会被垃圾回收,所以会占用内存
2.闭包的作用:可以使用同级的作用域,读取其他元素的内部变量,延长作用域
3.由于闭包引用了外部函数的局部变量,会消耗内存,闭包使代码简洁,闭包是理解装饰器的基础
1 def func(): 2 a=1 3 def in_func1(): 4 b=2 5 s=a+b 6 print(s) 7 def in_func2(): 8 in_func1() 9 print('--->in_func2',a) 10 return 'hello' 11 return in_func2 12 13 f=func() 14 f() 15 print(f) 16 ff=f() 17 print(ff)
#闭包的例子:计数器
1 def gen_count(): 2 c=[0] 3 def add_one(): 4 c[0]=c[0]+1 5 print('当前你是第{}次访问'.format(c[0])) 6 return add_one 7 8 #内部函数是计数器 9 c=gen_count 10 c() #第一次访问 11 c() #第二次 12 c()
本文来自博客园,作者:{admin-xiaoli},转载请注明原文链接:{https://www.cnblogs.com/crackerroot}