闭包
条件:
1.外部函数定义了内部函数
2.外部函数有返回值
3.内部函数用了外部函数的变量
4.返回的值是内部函数名
格式:
def 外部函数():
...
def 内部函数():
.....
return 内部函数
....
def func(a,b):
c=10
def inerfunc():
s=a+b+c
print("相加后的结果:",s)
return inerfunc #这里千万不要加括号,返回函数名
ifunc=func(6,9) #ifunc==inerfunc
ifunc1=func(2,8)
ifunc1()
ifunc()
根据上面的代码可知,ifunc和ifunc1分别占一块独立的空间。
闭包的同级访问
def func():
a=100
def innerfunc1():
b=90
s=a+b
print(s)
def innerfunc2():
innerfunc1() #同级函数调用
print("------->inner_func2")
return 'Hello'
return innerfunc2
f=func() #调用func()返回的是函数名innerfunc2
ff=f() #f()->调用函数innerfunc2,因为有返回值,所以用ff接受才能打印出
print(ff)
闭包的实例
#计数器
def generate_count():
a=[0]
def add_one():
a[0]+=1
print("第{}几次调用".format(a[0]))
return add_one
counter=generate_count()
counter()
counter()