问题标签 [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 投票
4 回答
960 浏览

python - 为什么python不允许通过引用传递变量

这可能更适合讨论组,但我不精通语言的内部(甚至语言本身)。无论如何,困扰我的是:

如果python允许使用关键字对外部范围进行干扰(副作用)nonlocal,那么为什么不允许通过引用传递参数来允许对函数参数进行类似的干扰:

现在可能:

为什么不 - 或者如果我们有什么可能出错:

(使用一些关键字,如 'byref' 或 'nonlocal,仅用于说明)。

0 投票
1 回答
47 浏览

python-3.x - 为什么这个 python 程序有以下输出?

输出是 1 2 10 20。我不知道为什么它会给出这些输出,谁能详细解释一下?谢谢!

0 投票
2 回答
4562 浏览

python - 了解 Python 3 中的非本地

我正在尝试了解 Python 3 变量范围和nonlocal.

考虑以下函数(这只是一个示例):

没有nonlocal. 但是,如果现在我想根据something需要非本地有条件地创建 getter 和 setter。

为什么nonlocal在一种情况下需要,而在另一种情况下不需要?换句话说,为什么something如果在第一种情况下正确找到(没有nonlocal),但在第二种情况下我得到:“UnboundLocalError:在分配之前引用局部变量'某物'”如果nonlocal不存在?

0 投票
2 回答
787 浏览

python - 方法定义中的 SyntaxError nonlocal python

我在交互模式下输入以下代码:

但我有一个SyntaxError: no binding for nonlocal 'a' found. 但我预计解析的结果nonlocal a将是 42,因为这个方法最近的封闭范围是一个类块。

0 投票
1 回答
442 浏览

python - 在python 3中保持一个变量不是局部的但不是全局的

所以我在 python 3.4.1 中有一小段代码,我只是在玩闭包

本来想看看能不能打电话

然后看看最后一行是否会像 javascript 一样打印大于 56 的数字(我认为)

但相反,它在“爪子”中制作了“x”,因为我调用+=了(对吗?),当它尝试获取它时它会抛出一个错误x+=1

是否有某种规则禁止在外部范围内修改变量?

0 投票
1 回答
53 浏览

python - 我可以在 python3.4 中访问与非本地或全局不同的变量吗?

我可以访问特定范围内的其他变量吗?像这样:

这不是生死问题,我只是好奇。我只是学习了 python 中的全局和非本地如何工作。现在,这绝对足够了,但我想知道我所要求的是否可能。特别是,我读到了 pep,他们正在考虑制作“特定范围内的非本地”之类的东西。但他们决定改用非本地的。是不是因为有办法在没有非本地的情况下做到这一点?或者也许有一些非本地的技巧,比如写两次nonlocal nonlocal variable

0 投票
1 回答
47 浏览

python - 我的函数什么时候会去以前的范围寻找变量?

在 python 3.0 中,据我所知,当我使用在本地范围内找不到的变量时,它将一直返回,直到到达全局范围以查找该变量。

我有这个功能:

当我插入一行时:

在withdraw函数定义下它工作得很好,但是当我不这样做时,它会给我一个错误,我在赋值之前引用了局部变量'balance',即使我在make_withdraw函数范围或全局范围内都有它。

为什么在其他情况下它会在以前的范围内找到一个变量而在这个范围内它不会?

谢谢!

0 投票
2 回答
4296 浏览

programming-languages - 非局部变量和全局变量有什么区别?

我正在学习编程语言的概念。

我在 python 语法中找到了术语“非本地”。

python中nonlocal的含义是什么?

0 投票
1 回答
74 浏览

python-3.x - Python:修改内部方法内的方法局部变量

我正在编写一个测试方法,比如说,test_foo(使用 pytest)。我正在测试一个函数的行为,该函数foo将另一个函数 . 作为参数getfoo迭代地调用get,有条件地根据 的返回值get,例如:

我正在尝试覆盖get,以便它可以访问它被调用的次数,并可以相应地返回不同的值。

这是我到目前为止的简化版本:

但是,我收到以下错误:

NameError: global name 'tries_so_far' is not defined

如果我在模块级别定义tries_so_far之外,我会得到预期的行为。test_foo但是,我想tries_so_far成为一个本地变量test_foo

有没有办法让get读/写tries_so_far使用全局变量或其他技术?注意:我无法更改get.

0 投票
4 回答
1390 浏览

python - 如何在python中访问类定义中的非本地范围?

我想这样做(虚拟示例):

但我得到:“SyntaxError: no binding for nonlocal 'var' found”

如果该方法被修饰,我真正打算做的是将方法名称附加到类范围内的列表中。像这样的东西: