【发布时间】:2022-12-11 19:15:52
【问题描述】:
以下代码在 Python 2.5 和 3.0 中都按预期工作:
a, b, c = (1, 2, 3)
print(a, b, c)
def test():
print(a)
print(b)
print(c) # (A)
#c+=1 # (B)
test()
但是,当我取消注释行时(二),我在行中得到一个UnboundLocalError: 'c' not assigned(一个). a 和b 的值打印正确。我不明白:
-
为什么会出现运行时错误(一个)因为后来网上有说法(二)?
-
为什么变量
a和b按预期打印,而print(c)引发错误?我能想到的唯一解释是赋值
c+=1创建了一个当地的变量c,优先于全局变量c。但是变量如何在它存在之前“窃取”作用域呢?为什么c显然是本地的?
另请参阅Using global variables in a function,了解有关如何从函数内重新分配全局变量的问题,以及Is it possible to modify variable in python that is in outer, but not global, scope?,了解如何从封闭函数(闭包)重新分配。有关 OP 的情况,请参阅Why isn't the 'global' keyword needed to access a global variable?预期的一个错误但是没有得到一个,通过简单地访问一个没有
global关键字的全局。
【问题讨论】: