Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【python】闭包

【python】闭包

作者头像
keloli
发布于 2022-07-28 00:44:04
发布于 2022-07-28 00:44:04
90200
代码可运行
举报
运行总次数:0
代码可运行

ref

concept

  • nested function(内嵌函数): A function that is defined inside another function is known as a nested function.
  • non-local variables

When do we have closures?

As seen from the above example, we have a closure in Python when a nested function references a value in its enclosing scope.

The criteria that must be met to create closure in Python are summarized in the following points.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
We must have a nested function (function inside a function).
The nested function must refer to a value defined in the enclosing function.
The enclosing function must return the nested function.

example

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def make_multiplier_of(n):
    def multiplier(x):
        return x * n
    return multiplier


# Multiplier of 3
times3 = make_multiplier_of(3)

# Multiplier of 5
times5 = make_multiplier_of(5)

# Output: 27
print(times3(9))

# Output: 15
print(times5(3))

# Output: 30
print(times5(times3(2)))

others

  • 一般来说,当对象中只有一个方法时,这时使用闭包是更好的选择。
  • All function objects have a closure attribute that returns a tuple of cell objects if it is a closure function. Referring to the example above, we know times3 and times5 are closure functions. 所有函数都有一个 closure属性,如果这个函数是一个闭包的话,那么它返回的是一个由 cell 对象 组成的元组对象。cell 对象的cell_contents 属性就是闭包中的自由变量。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
make_multiplier_of.__closure__
times3.__closure__
(<cell at 0x0000000002D155B8: int object at 0x000000001E39B6E0>,)

The cell object has the attribute cell_contents which stores the closed value.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
times3.__closure__[0].cell_contents
3
 times5.__closure__[0].cell_contents
5
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
看完这篇文章还不懂Python中的闭包,请拍死小编
Python中的闭包不是一个一说就能明白的概念,但是随着你往学习的深入,无论如何你都需要去了解这么一个东西。 闭包的概念 我们尝试从概念上去理解一下闭包。 在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。闭包可以用来在一个函数与一组“私有”变量之间创建关联关系。在给定函数被多次调用的过程中,这些私有变量能够保持其持久性。—— 维基百科 用比较容易懂的人话说,就是当某个函数被当成对象返回时,夹带了外部变量,就形成了一个闭包。看例子。 def make
小小科
2018/06/20
6480
python学习笔记(15)python高级知识点之闭包
我们可以看到,my_power函数在返回的时候,也将其引用的值(n)一同带回,n的值被新的函数 所使用,这种情况我们称之为闭包
大数据小禅
2021/08/16
2130
Python教程第10章 | 通俗易懂学闭包
闭包是在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用,这样就构成了一个闭包。
仲君Johnny
2024/01/24
1920
Python教程第10章 | 通俗易懂学闭包
Python嵌套函数 闭包
这也很好理解,在函数outer中定义了另外一个函数inner,而inner也必须在outer中被调用才能执行。
猫叔Rex
2022/01/24
1.1K0
Python闭包|你应该知道的常见用例(下)
在 Python 编程语言中,闭包通常指的是一个嵌套函数,即在一个函数内部定义的另一个函数。这个嵌套的函数能够访问并保留其外部函数作用域中的变量。这种结构就构成了一个闭包。
数据科学工厂
2024/12/30
860
Python闭包|你应该知道的常见用例(下)
闭包(Closures)函数/表达式
在其他语言中,闭包函数也可能叫代码块(blocks)或者匿名函数(lambdas)。
gojam
2019/05/14
4700
Python的闭包
地位: 闭包 和函数有关系 解释: python中一切皆对象: 函数可以赋值给变量,例如 a = def func(), 可以把函数当做参数,传入一个函数 可以把函数当做一个函数的返回结果 示例: Python中允许的正确的调用方法: def curve_pre(): def curve(): print('This is a funcion') return curve #函数作为返回值 func = curve_pr
ZONGLYN
2019/08/08
8180
Python Closure
从上面这段话中可以看出闭包的两个重要条件是引用自由变量和函数,与闭包这个名称结合起来看,这个函数就像是一个包,而这个函数所引用的变量就好比函数这个包中封闭起来的东西,包中的东西被紧紧封闭在包中,函数所引用的变量也被与这个函数所绑定。
py3study
2020/01/03
3390
Python入门教程:什么闭包函数
闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用)。闭包指的是:函数内部函数对外部作用域而非全局作用域的引用。
Python学习者
2023/02/22
2630
Python深入04 闭包
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 闭包(closure)是函数式编程的重要的语法结构。函数式编程是一种编程范式 (而面向过程编程和面向对象编程也都是编程范式)。在面向过程编程中,我们见到过函数(function);在面向对象编程中,我们见过对象(object)。函数和对象的根本目的是以某种逻辑方式组织代码,并提高代码的可重复使用性(reusability)。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。 不同的
Vamei
2018/01/18
6220
漫谈闭包
按照这个标准,一阶行动者一般做一件事在10的量级,二阶行动者成功的完成了10的2次方,三阶行动者则表示把一件事情持续行动到10的3次方,四阶行动者 ,就过于宏大,往往就是几代人持续地完成,持续的执行某件事,也就是我们说的家族传承。
stormwen
2019/08/05
3850
最易写出bug?Python命名空间和作用域介绍
简单的说,命名空间就是一种“名称-对象”的映射表,使得我们可以通过对象指定的名称来访问它们。
MeteoAI
2019/08/12
7700
最易写出bug?Python命名空间和作用域介绍
闭包函数
闭包:闭是封闭(函数内部函数),包是包含(该内部函数对外部作用域而非全局作用域的变量的引用)。闭包指的是:函数内部函数对外部作用域而非全局作用域的引用。
py3study
2020/01/15
8690
聊一聊 Python 中的闭包
https://segmentfault.com/a/1190000007321972
昱良
2019/11/23
5450
【Python基础编程】迭代器、生成器、装饰器与闭包全攻略
上篇文章将了python多态,类属性等知识,这篇文章了解一下python的三器一包:迭代器、生成器、装饰器和闭包
易辰君
2024/11/07
4600
Python函数式编程之闭包
-------------------------函数式编程之*******闭包------------------------ Note: 一:简介 函数式编程不是程序必须要的,但是对于简化程序有很重要的作用。 Python中一切都是对象,函数也是对象 a = 1 a = 'str' a = func 二:闭包 闭包是由函数及其相关的引用环境组合而成的实体(即:闭包=函数+环境变量) 如果在一个内部函数里,对在外部作用域(但不是在全局作用域)的变量
py3study
2020/01/19
3600
Python数据分析(中英对照)·Scope Rules范围规则
2.1.1: Scope Rules范围规则 Let’s talk about scope rules next. 接下来我们来讨论范围规则。 Consider a situation where, in different places of your code,you have to find several functions called "update," 考虑一个情况,在代码的不同地方,你必须找到几个叫做“更新”的函数。 or several variables called "x."
数媒派
2022/12/01
2990
C++雾中风景7:闭包
闭包(closure)是函数式编程的重要的语法结构。 闭包的概念其实很简单,一言以蔽之:闭包是带有上下文的函数。说白了,就是有状态的函数。也就是说一个局部变量n,在被函数对象给“封闭”在函数里,从而能把值保存了下来,让函数能够保存状态。(其实本质上就是一个类,用纯粹面向对象的方式理解,函数也是一个对象)
HappenLee
2018/09/05
9260
Python的高级语法与用法(二)
这种将数字转换成枚举类型的方法和字符串整形转换是不一样的,前者是数值访问具体枚举类型的方案,后者则是数据结构的内部转换。
stormwen
2019/08/05
5200
python生产实战 python 闭包之庖丁解牛篇
注:这篇文章很长,但我保证你看完后能获得足够多对闭包的了解,也会彻底理解清楚中间件的实现原理。
python编程从入门到实践
2021/03/03
5850
python生产实战 python 闭包之庖丁解牛篇
相关推荐
看完这篇文章还不懂Python中的闭包,请拍死小编
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验