python闭包

闭包:带运行环境的函数

用处:

  • 从函数外可以读取函数内部的变量
  • 让这些变量的值始终保持在内存中(也可以理解为保留当前运行环境)

返回函数,与闭包的关系是:闭包需要以返回函数的形式实现

1、返回的函数不会立即执行,需要再次调用,这样能让我们根据需求执行,节省计算资源

2、调用方法:

def foo():
    def bar():
        return 0
    return bar

a = foo()
print(a()) # 再次调用才会执行,或者如下调用
print(foo()())

3、返回函数不要引用任何循环变量,或者后续会发生变化的变量

>>> def count():
...     fs = []
...     for i in range(1,4):
...             def f():
...                     return i*i
...             fs.append(f)
...     return fs
...
>>>
>>> f1, f2, f3 = count()
>>>
>>>
>>> f1()
9
>>> f2()
9
>>> f3()
9

4、如果一定要引用循环变量,方法是再创建一个函数,用该函数的参数绑定循环变量当前的值,无论该循环变量后续如何更改,已绑定到函数参数的值不变

>>> def count():
...     def f(j):
...             def g():
...                     return j*j
...             return g
...     fs = []
...     for i in range(1,4):
...             fs.append(f(i))
...     return fs
...
>>>
>>>
>>> f1, f2, f3 = count()
>>>
>>> f1()
1
>>>
>>> f2()
4
>>> f3()
9

参考:

1、https://blog.csdn.net/qq_41573234/article/details/81737454

2、https://www.cnblogs.com/ArsenalfanInECNU/p/9628836.html

posted @ 2020-09-09 01:10  Flyingpie  阅读(95)  评论(0)    收藏  举报