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() 

 

posted @ 2021-08-26 13:18  admin-xiaoli  阅读(29)  评论(0编辑  收藏  举报