222
|
Srikar Appalaraju Tonetel · 技术社区 · 14 年前 |
![]() |
1
381
当函数可以从已完成执行的封闭作用域访问局部变量时,将发生闭包。
什么时候?
如果你的嵌套函数
下面是一个嵌套函数的例子,它不是闭包。
|
![]() |
2
100
这个问题已经有人回答了 aaronasterling 然而,有些人可能对变量如何存储在引擎盖下感兴趣。 在谈到片段之前: 闭包是从其封闭环境继承变量的函数。当您将函数回调作为参数传递给另一个执行I/O操作的函数时,稍后将调用此回调函数,此函数将几乎神奇地记住声明它的上下文以及该上下文中可用的所有变量。
示例:闭包属性,但内部没有内容,因为没有自由变量。
注: FREE VARIABLE 必须创建闭包。 我将使用与上面相同的片段进行解释:
所有Python函数都有一个closure属性,因此让我们检查与closure函数相关联的封闭变量。
这个
func_闭包中的第一个元素,它可以是None,也可以是包含函数自由变量绑定的单元元组,并且它是只读的。
在上面的输出中,您可以看到
所以,当我们调用函数时
我将再次解释使用上述代码片段的一些更改:
在上面的代码片段中,我不在printer函数中打印msg,因此它不创建任何自由变量。由于没有自由变量,因此闭包内将没有内容。这正是我们上面看到的。
现在我将解释另一个不同的片段来清除所有内容
所以,我们看到
我们打电话来的时候
|
![]() |
3
70
Python有一个 虚弱的
闭包非常优雅,因为它给这样编写的函数提供了拥有“内部内存”的能力。从Python2.7开始,这是不可能的。如果你试着
你会得到一个错误,说x没有定义。但如果其他人已经证明你可以打印出来,那怎么可能呢?这是因为Python是如何管理函数变量作用域的。而内部功能可以 阅读 外部函数的变量,它不能 写 他们。 function decorator pattern Python为其提供语法糖。 更新 正如已经指出的,有很多方法可以处理python的范围限制,我将展示一些方法。
使用
2。
三。
定义一个简单的可修改类
并创建
自从
四。
正如@unutbu指出的,另一种方法是将每个变量定义为一个数组(
5个。
正如@raxacoricofallapatorius所建议的,你可以
|
![]() |
4
16
Python2没有闭包-它有解决方案 相似的 关闭。 已经给出的答案中有很多例子——将变量复制到内部函数、修改内部函数上的对象等等。
用法:
这个
|
![]() |
5
9
我有一个情况,我需要一个单独但持久的名字空间。 我上过课。否则我不会。 隔离但持久的名称是闭包。
|
![]() |
6
5
这是一个什么是闭包以及如何使用闭包的示例。 |
![]() |
7
0
我想提供python和JS示例之间的另一个简单比较,如果这有助于使事情更清楚的话。 JS公司:
执行:
蟒蛇:
执行:
原因:
如上所述,在python中,如果在内部作用域中有对同名变量的赋值,则会在内部作用域中创建一个新引用。对于JS则不是这样,除非您显式地用
|
![]() |
July · 如何定义数字间隔,然后四舍五入 1 年前 |
![]() |
user026 · 如何根据特定窗口的平均值(行数)创建新列? 1 年前 |
|
Ashok Shrestha · 需要追踪特定的颜色线并获取坐标 1 年前 |
![]() |
Nicote Ool · 在FastApi和Vue3中获得422 1 年前 |
|
Abdulaziz · 如何对集合内的列表进行排序[重复] 1 年前 |
![]() |
asmgx · 为什么合并数据帧不能按照python中的预期方式工作 1 年前 |