史上最通俗的python 闭包讲解

闭包是针对于函数的,不是类的,是在函数中提出的概念。
在一个函数里又嵌套了一个函数,这不叫闭包,把这个函数扔出来才叫闭包。
示例代码:

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

    print(locals())

    return inner_func

x=func()

print(x)

一个函数,内部包含了另一个函数,通过 return 把内部的函数扔出来。

这个外部的函数要想把内部的函数扔出来了,必须执行 return ,但是即然执行到了 return ,那这个外部的函数必须是执行完了的了,因为 return 一定 是函数的最后一条语句,或者说,执行到了 return ,函数就结束了。(插话:return 一定 是函数的最后一条语句,但不是必须是函数的最后一条语句。函数可以没有 return语句。)

如果有一个变量接收了外部的函数,那么不能只接收名字,因为只接收名字函数并没有执行这个外部函数,内部的函数当然也没有扔出来。所以必须是外部函数要带着括号,即让外部函数的执行结果给接收的变量,这个执行的结果当然就是扔出来的内部的函数。

这个接收的变量得到的外部函数扔出来的这个内部函数,是这个内部函数的肉体,所以这个变量就被内部函数附体了,相当于内部函数逃出了外部函数的控制,并且换了个名字,开始了新的生活,中国的古话叫:借尸还魂。

你可能感兴趣的:(史上最通俗的python 闭包讲解)