python 闭包
什么是闭包
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# BY:wenchao.li time: 2020/7/8
# 闭包,是在函数中提出的概念。
def func():
a=100
def func1():
b=200
print (a,b)
# return a
#注意,下面不能加括号,加括号相当于调用了
return func1
#外部调用func1 是没办法调用的,直接执行会报错,
# 也无法在这里调用a,因为a是全局变量,我们可以return a ,然后再外面有一个容器来接住a
#同理,我们也可以吧 func1扔出来,这时候,x就是里面的内部函数
x=func()
print (x)
#这时候执行x()就相当于执行func1了
x()
#像这种格式的,就叫闭包
#条件1:外部函数定义内部函数 条件2:外部函数是有返回值的, 条件3:return返回的值是内部函数名 条件4:内部函数引用了外部函数的变量。符合这样条件的叫闭包
示例
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# BY:wenchao.li time: 2020/7/8
def func(a,b):
c=100
def func1():
s=a+b+c
print ('sum is :',s)
return func1
x=func(200,200)
print (x)
x()
示例
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# BY:wenchao.li time: 2020/7/9
def func():
a=100
def func1():
b=90
s=a+b
print (s)
def func2():
func1()
print ('>>>>>>>>>>func2',a)
return 'hello'
return func2
x=func()
print (x)
xx=x()
print (xx)
示例
#!/usr/bin/env python
#-*- coding:utf-8 -*-
# BY:wenchao.li time: 2020/7/9
def counter():
count=[0]
def sumcounter():
count[0]=count[0]+1
print ('当前是第{}次访问' .format(count))
return sumcounter
x=counter()
x()
x()
x()