闭包

1.闭包
形成闭包的条件
1.外部函数内定义了内部函数
2.外部函数有返回值
3.返回的是函数名
4.内部函数引用了外部函数的变量

格式:
def 外部函数():
...
def 内部函数():
...
return 内部函数

闭包_第1张图片

def func():
    a = 100

    def inner_func():
        b = 99
        print(a, b)

    return inner_func


x = func()
x()

 闭包传参

 1 def func(a, b):
 2     c = 10
 3 
 4     def inner_func():
 5         s = a+b+c
 6         print("相加后的结果:", s)
 7 
 8     return inner_func
 9 
10 
11 # 调用func
12 ifunc = func(1, 2)   # ifunc = inner_func
13 
14 # 调用ifunc
15 ifunc()

 2.闭包的作用

 

 1 def func(a, b):
 2     c = 10
 3 
 4     def inner_func():
 5         s = a+b+c
 6         print("相加后的结果:", s)
 7 
 8     return inner_func
 9 
10 
11 # 调用func
12 ifunc = func(1, 2)   # ifunc = inner_func
13 
14 ifunc1 = func(3, 4)
15 
16 ifunc1()
17 
18 # 调用ifunc
19 ifunc()

闭包_第2张图片

 

闭包_第3张图片

 每次调用func时候,inner_func都是创建一个新的内存空间,执行inner_func内的代码

因此,每次的参数值都时被保存下来的

 闭包_第4张图片

闭包_第5张图片

3. 利用闭包创建计数器

 1 def generate_counter():
 2     container = [0]
 3 
 4     def add_one():
 5         container[0] = container[0] + 1
 6         print("当前是第{}次访问".format(container[0]))
 7     return add_one
 8 
 9 
10 counter = generate_counter()
11 counter()
12 counter()
13 counter()

闭包_第6张图片

 闭包_第7张图片

 

你可能感兴趣的:(闭包)