问题标签 [python-closures]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
36586 浏览

python - 词法闭包是如何工作的?

当我在调查 Javascript 代码中的词法闭包问题时,我在 Python 中遇到了这个问题:

请注意,此示例有意避免lambda. 它打印“4 4 4”,这令人惊讶。我期待“0 2 4”。

这个等效的 Perl 代码做得对:

打印“0 2 4”。

你能解释一下区别吗?


更新:

问题在于i全球化。这显示相同的行为:

如注释行所示,i当时是未知的。尽管如此,它仍然打印“4 4 4”。

0 投票
2 回答
7269 浏览

python - “后期绑定闭包”是什么意思?

我有 C++ 的背景并尝试学习一些 python。

虽然我了解 C++ 的虚函数,但不幸的是,我不明白 python 中闭包的后期绑定是什么意思。

链接:https ://gist.github.com/deemson/8efabf56d67623ead804 (不再有效)

从教程复制粘贴:

这里到底发生了什么?当函数附加到列表中时,它有什么值?有人可以简化这段代码让我理解吗?

0 投票
1 回答
33 浏览

python - 为什么我在编写 python 闭包时遇到 UnboundLocalError,但在另一个类似的代码片段中却没有?

我这里有两个代码片段。

第一个,函数create

第二个,函数包装器

第一个效果很好,但第二个引发了关于变量的错误:在赋值之前引用了x局部变量。x我可以从字面上理解这个错误的含义,但我认为变量x应该与pos前一个片段中的变量相同。为什么pos可以,但x不行?

0 投票
1 回答
29 浏览

python-decorators - 装饰器仅在装饰方法时有效,但在使用作为参数传递的方法调用装饰器时无效

长期聆听者;第一次来电,所以如果我没有完全遵守指南,请不要拍我。

所以我正在尝试创建一个将状态栏应用于生成器方法的装饰器。使用 @decorator 语法时,我的装饰器工作得很好。然而,当调用装饰器并将方法作为参数传递时,装饰器什么也不做。我想像调用任何其他函数一样调用装饰器函数,而不是使用@status_bar,因为我想要一种简单的方法来选择使用生成器。

这是工作代码:

这会按预期在提示中产生一个状态栏。

| ▶▶▶▶▶▶▶▶▶▶▶▶▶ ▂▂▄ 326 in 3s (98.2/s)

但是在没有语法糖的情况下运行代码什么都做不了。

相反,代码就像没有调用任何函数一样运行。

进程以退出代码 0 结束

我似乎总是得到相同的输出,而且我知道这里有一个简单的解释,这就是为什么它让我如此烦恼以至于我无法让它工作。任何帮助是极大的赞赏。谢谢。

0 投票
1 回答
35 浏览

python - Python变量范围 - 如果在内部异常中使用外部异常变量未定义

有人可以帮我理解这里发生了什么。我对变量范围在 python 中的工作方式有一些了解。
当这段代码运行时,我得到一个错误:


输出错误:

我的理解是,当调用并完成内部异常时,“msg”变量将变为未设置或从内存中删除。

现在,当我运行这段代码时,它运行成功:

输出:

此错误与“变量范围”或“闭包”有关吗?如果有人在python中有详细说明的链接,请您帮忙。