20 闭包

Posted scopicat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20 闭包相关的知识,希望对你有一定的参考价值。

闭包的概念

闭包就是能够读取其他函数内部变量的函数

闭包 = 函数+环境变量(函数外部的变量)

闭包存在的条件

  • 闭包必须返回一个函数
  • 被返回的函数必须调用环境变量

python里一切皆对象,你甚至可以返回一个函数,把函数赋值给一个变量等。。。

来看看这个闭包

例子:

def curve_pre():
    a = 25 # 此为环境变量,它在被返回的函数的外面
    def cureve(x):
        return a*x
    return cureve
f = curve_pre() # 此时调用curve_pre返回的是一个闭包(函数+环境变量)
print(f(2))
结果:
50

闭包的相关方法 

__closure__闭包方法:返回当前对象的函数的闭包对象:

print(curve_pre().__closure__)或print(f.__closure__)
结果:
(<cell at 0x0000000000A73078: int object at 0x000000005273D1F0>,)

  

打印闭包中的环境变量:

print(f.__closure__[0].cell_contents)
结果:
25

  

闭包的意义

闭包保存的是一个函数现场,它返回的不止是函数,还返回了该函数使用需要的环境变量。

闭包的作用

 

 

以上是关于20 闭包的主要内容,如果未能解决你的问题,请参考以下文章

JS---闭包

20个简洁的 JS 代码片段

20个简洁的 JS 代码片段

scala编程——函数和闭包

Python-20_装饰器-01_基础高阶函数闭包

JavaScript作用域和闭包