我的理解是,如果我在函数中使用变量而函数中没有赋值语句,它将在函数“外部”查找变量。
这似乎是一个列表的情况,但不是一个简单的变量。
在下面的代码中,我被告知语句“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/