闭包详解

什么是闭包?

内层函数引用外层函数的变量,并把这个变量封闭到它的函数体内,直到它被调用后才释放,有人说,闭包是内层函数和外层函数沟通的桥梁

还是不够明白?让我们通过代码说明.

def f1():
    name='Lily'
    def inner():
        print(name)
    return inner
a=f1()
a()

相应的解释:

inner()就是这个内部函数,对在外部作用域(但不是在全局作用域)的变量进行引用:name就是被引用的变量,name在外部作用域f1里面,但不在全局作用域里,则这个内部函数inner就是一个闭包。
再稍微讲究一点的解释是,闭包=函数块+定义函数时的环境,inner就是函数块,name就是环境。

进阶

def outer():
    temp=[]
    #当运行到下面的for循环时,
    # 首先i=0,接下来执行temp.append(),temp列表的每个元素是inner函数,
    # 循环进行,i执行到9,停止
    for i in range(2):
        def inner():
            print(i)
        temp.append(inner)
    return temp

use_outer=outer() #此时use_outer为temp
print(use_outer)#列表
# use_outer[0]()#即temp第一个元素,即inner()函数
for i in use_outer:
    i()

进阶

进阶相关练习:

mylist=[lambda:x for x in range(2)]

for i in mylist:
    print(i)
    print(i())

#输出结果
<function . at 0x000002387EF14B70>
1
<function . at 0x000002387FF79598>
1

参考:https://blog.csdn.net/marty_fu/article/details/7679297
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/sinat_40701582/article/details/84865342
今日推荐