问题标签 [python-nonlocal]

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 投票
1 回答
48 浏览

python - 嵌套函数中声明的非局部变量的值如何/是什么?

所以我意识到,在调用 make_test_dice 之后,当调用foursided 时,它会跳过 index1 var 的打印并转到 dice 函数,因为这是一个闭包。我知道非局部变量是指封闭范围内的变量,因此更改嵌套函数中的 var 会在外部更改它,但我不明白 index 变量如何存储在嵌套函数中,因为它在 dice() 中设置值时需要一个值索引。鉴于我的打印语句,我相信它可能是 index 的先前值,但我认为 index 在我们退出 make_test_dice 函数的本地框架后会消失。

0 投票
3 回答
53 浏览

python-2.7 - 如何更改外部函数变量?

在 Mark Lutz 的“Learning Python”中,我读到:“函数可以自由使用在语法封闭函数和全局范围内分配的名称,但它们必须声明这样的非局部变量和全局变量才能更改它们”我未能在 Python 2.7 中测试它们

给出错误:

'global' (NameError: global name 'f1_a' is not defined) 和 'nonlocal' (nonlocal f1_a , SyntaxError: invalid syntax) 不起作用。这是否意味着无法将外部函数中引入的变量从内部(直接封闭的)变量中更改?

0 投票
3 回答
152 浏览

python - 将变量传递回python中的类

我是新人,请多多包涵。下面是我的代码:

randAssign 是 Player() 中的一种方法,我试图随机设置玩家的统计数据,并且需要在激活 randAssign() 时重写类变量。由于某种原因,使用 global 会传递以下错误:

使用 Nonlocal 会产生此错误:

如果没有全局或非局部,它就不会重写Player()'s变量。我已经做了十几次迭代,从完全错误到“我认为这会起作用,但它不起作用”,需要帮助。

0 投票
2 回答
2908 浏览

python - Python:如何允许“内部函数”更改多个“外部函数”中的非局部变量

假设我有一个函数,其中有一大段代码在函数内的各个地方重复,我可以执行以下操作:

foo我可以“读取” while inside范围内的变量bar,此外,如果我需要编辑它们,我可以这样做:

问题

现在假设我有几个函数,, , foo_1...等等,所有这些函数都有相同的代码行,它们都在重复。在 each 内部定义会很单调(更不用说每次我想更改的噩梦) ,但是执行以下操作不起作用,因为它似乎适用于定义函数的范围,而不是调用它的范围:foo_2foo_3barbarbarfoo_inonlocal

一个潜在的解决方案

解决此问题的一种方法是传入您需要更改的所有变量,然后返回它们。像这样的东西:

我的问题

上面的解决方案有几个问题:

  • 它比简单的要冗长得多bar()尤其是当有更多变量时)
  • 实际上,bar在每个内部定义方面并没有太大的改进,foo_i因为假设我以前刚刚在其中访问过的一个变量bar现在决定编辑。我不仅需要更改函数,而且在调用它的任何地方都需要更改(因为现在我必须返回一个额外的变量)。

有没有更好的方法来实现上述目标?

(这感觉就像是那种没有答案的问题,所以如果这是一个重复的问题,我很抱歉。我还没有找到任何东西。)

0 投票
0 回答
2163 浏览

python - Python 中的状态变量:何时选择类、非局部变量或函数属性

在 python 中,有(至少)三种不同的方法来跟踪函数的状态信息(显然,这些示例没有任何有意义的方式来使用状态信息):

面向对象类:

非局部变量(Python 3):

或功能属性:

我了解每种方法的工作原理,但我无法解释为什么(除了熟悉之外)您会选择一种方法而不是另一种方法。继 Python 之禅之后,类似乎是最优雅的技术,因为它消除了嵌套函数定义的需要。然而,与此同时,类可能会引入比所需更多的复杂性。

在权衡在程序中使用哪种方法时应该考虑什么?

0 投票
2 回答
59 浏览

python-3.x - 如何使用具有多个内部函数的非本地语句?

有人可以解释一下为什么这个功能不起作用吗?“非本地”语句不应该可以x理解 in g,因此 in h

编辑:我使用 nonlocal 是为了不在除以下x之外的任何地方定义g():我必须在我的代码中定义几个变量,并希望在函数中进行init_var()。为了方便起见,我想避免在我的主要功能中声明它们。有没有办法为此目的调整以前的代码?

0 投票
1 回答
36 浏览

python - 为什么未触发的赋值会改变“非本地”行为?

今天我正在阅读 python 更改日志并遇到 nonlocal 关键字并对其进行了一些实验。我发现了一个令人困惑的情况,即未触发的赋值会改变nonlocal关键字的行为,请参见下面的示例。

您可以在 中看到test2.py,有一个未触发的分配x = 'b'改变了非本地的行为。

为什么会这样?

0 投票
1 回答
190 浏览

python - 如何检查具有给定名称的变量是否是非本地的?

给定一个堆栈帧和一个变量名,我如何判断该变量是否是非本地的?例子:

0 投票
1 回答
19 浏览

python - 访问嵌套的外部函数元素

我的代码有问题。因为我无法从嵌套函数内部的外部函数访问列表。我尝试了非本地,但它给了我一个错误“发现非本地“a”的非绑定。

有谁知道问题可能是什么?此致

0 投票
0 回答
494 浏览

python-3.x - Python回调函数中的非局部变量没有绑定

我有以下代码用于从 RabbitMQ 消息队列接收消息:

我在声明中遇到SyntaxError: no binding for nonlocal 'result' found错误。我认为,这个答案使用in 的方式完全相同。在这种我不明白的情况下工作正常。为什么这里没有解决方案?nonlocalnonlocalglobalnonlocal