python - 不理解 undefined reference

标签 python python-3.x scope

我的理解是,如果我在函数中使用变量而函数中没有赋值语句,它将在函数“外部”查找变量。

这似乎是一个列表的情况,但不是一个简单的变量。

在下面的代码中,我被告知语句“aa += 1 包含一个未解析的引用”aa“,但是对 bb[0] 的引用很好。这是为什么?

aa = 0
bb = [9, 7]

def bbtest():
    aa += 1
    bb[0] += 1

最佳答案

这有点晦涩难懂,但这是有原因的:在编译一个函数时,Python 会查看那里使用的所有名称并确定它们来自哪个范围。未分配给的名称将使用外部作用域(全局或非本地),分配给 的名称是本地的。因为 aa += 1 算作一个赋值,所以它将 aa 标记为局部变量。

虽然下一行看起来很相似,但它在做一些不同的事情:你没有在任何地方为名称 bb 赋值。您正在从非本地/全局名称(列表)中检索某些内容,然后分配给它的一个元素。

您可以通过将 aa 显式标记为非本地或全局来解决此问题:

def bbtest():
    global aa
    aa += 1
    bb[0] += 1

另一方面,您可以通过分配给名称来使 bb 案例失败,甚至在之后:

def bbtest():
    bb[0] += 1
    bb = "foo"

关于python - 不理解 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59904834/

相关文章:

python - 了解 _tf_sess()

python - Matplotlib cmap 未按预期工作

python - 制作函数字典

python - 在递增和并列的整数序列中找到给定位置 i 的整数

php - 在 PHP 中正确使用变量作用域

python - Python 中的弃用警告,这里有意义吗?

python - 何时使用 new.instancemethod 与将方法分配给类

syntax - 如何在 CoffeeScript fat-arrow 回调中引用实际的 'this' ?

javascript - 从外部访问 JavaScript switch 语句内声明的变量

python - 重新编译 python 3 包时未拾取本地编译的 libffi 文件