问题标签 [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 回答
31 浏览

python - 即使在递归调用中,“非本地”变量是否总是从外部循环继承?

我写了一些代码,最近在编写函数的函数时遇到了“非本地”的需求(在处理递归时遇到了这个问题)。

例如:

我的问题很简单,因为我们调用递归函数helper(node.next),然后循环回nonlocal head- 是否head取值 None (由于非本地头)?或者它是否保留head = nex.next,它在之前的递归调用中被分配?

所以我想了解是否'nonlocal head'会导致head总是取它在外部函数中分配的任何值,还是不是这样?相反,它只是在内部函数中初始化 head 的一种方法,因此它只能通过获取外部函数中定义的初始值来开始。

0 投票
1 回答
482 浏览

python - SyntaxError:没有找到非本地“i”的绑定

我想定义一个静态变量 i (通过对该函数的所有递归调用,我只想要一个 i 的副本)。为此,我在类下方但在函数之外声明了“i”。要使用声明的“i”,我在函数定义中使用了关键字“nonlocal i”。(请参阅下面的代码)即使那样,我也收到错误

参考下面的代码,我正在尝试解决一个leetcode问题

0 投票
1 回答
56 浏览

python - 如何在缓存结果时更新非局部变量?

当使用像 lru_cache 这样的 functools 缓存函数时,内部函数不会更新非局部变量的值。同样的方法在没有装饰器的情况下也有效。

使用缓存装饰器时非局部变量是否没有更新?另外,如果我必须更新非局部变量但还要存储结果以避免重复工作,该怎么办?或者我是否需要从缓存函数中返回答案?

例如。以下未正确更新非局部变量的值

背景

我正在尝试解码方式问题,该问题正在寻找可以将一串数字解释为字母的方式数量。我从第一个字母开始,采取一两个步骤并检查它们是否有效。到达字符串末尾时,我更新了一个非局部变量,该变量存储了可能的方式数。此方法在不使用 lru_cache 的情况下给出正确答案,但在使用缓存时失败。我返回值的另一种方法正在工作,但我想检查如何在使用记忆装饰器时更新非局部变量。

我的错误代码:

公认的解决方案:

0 投票
1 回答
88 浏览

python - python nonlocal - 为什么有时需要它有时不需要

我知道为什么我们需要在 Python 中声明 nonlocal 并且对以下示例有点困惑。如果没有nonlocal records第 276records行,则第 277 行没有定义。但是,records可以在第 289 行中使用而不会出现任何错误。 没有非本地的

以下是非本地的情况,效果很好。 与非本地

0 投票
1 回答
54 浏览

python - 在类体内使用非局部或全局

在 python 中,使用import类中的语句来定义刚刚从其他模块窃取的类变量是有效的:

使用非常混乱的语句将全局变量引用到类也是有效的x=x

但是,如果我使用函数来生成类,是否有类似的方法将变量从函数参数复制到类主体?

我想要这种性质的东西:

参数名称很重要,因为它是通过关键字而不是顺序传递的,generate_meta_options(design="A", model=Operation)并且类中的名称必须相同,我找到了一种解决方法,方法是为所有输入设置变量别名,但这有点烦人

有没有更好的方法使用nonlocal关键字来实现这一点?似乎python确实允许nonlocalglobal在一个类中使用,但变量没有保留在类中,所以我无法想象它的用例。

我确定我正在使用的库只需要一个具有属性查找的对象,这样我就可以远离类,但是我看到的每个示例都使用类(我怀疑是因为继承多个配置是自然的)所以我很犹豫去那个路线。

从不同的模块复制变量比在上述范围内复制一个权利更容易,这似乎真的很奇怪,所以我想我会问,有没有办法将变量从nonlocal范围复制到类属性中不创建具有不同名称的单独变量?

作为切线,在类主体中使用nonlocalor关键字是否有用?global我认为它没有用,但也没有理由做额外的工作来禁止它。

0 投票
0 回答
30 浏览

python - if-elif 中的变量未相应设置

如下面发布的代码所示。尽管打印语句显示的值为visualizationOperationID2,这意味着elif应该执行该语句,但是如下面的输出部分所示,两者areaOfCoverageVisOpValueaveragHeightsVisOpValue都设置为 False!!我所期望的是,根据 和 的值visualizationOperationID averagHeightsVisOpValue分别areaOfCoverageVisOpValue应该是 False 和 True 。

你能帮我实现我期望发生的事情吗?请问有什么问题。

代码

可视化操作类

输出

0 投票
1 回答
38 浏览

python - Python inner function sets vs nonlocal

I believe I know the answer to this, but wanted to double-check because I find this a bit confusing.

Here, if I want to change the value of a, I need to use nonlocal. The fact that the set changes is just because sets are passed by reference? So, in an inner function we have access to the values of the outer function's variables, but cannot modify them unless they're references?

0 投票
1 回答
28 浏览

python - 动态绑定非局部变量

为了将名称绑定到外部作用域的变量,我们可以使用globalornonlocal关键字,但变量名称事先已知,例如,

要将名称动态绑定到全局变量,我们可以改用globals()字典 ( globals()['x0'])。有没有办法用非局部变量做到这一点?有nonlocals()['x1']什么东西吗?

编辑1:澄清建议的重复问题不需要修改非本地人,而我的需要。