如题,现在只考虑一种情况, 其他情况以此类推:
a = 1
def func1():
print(a)
return a
def func2():
print(a)
a = a + 1
return a
这两个函数只有 func1 可以正常执行, func2 会抛出 UnboundLocalError 异常。前者比较好解释,局部作用域没有 a ,那么会从全局作用域中去查找这个 a 。
后者我只能这样解释,就是函数体在执行前会做预先检查。如果发现有赋值语句存在,就会认为该变量名处于局部作用域中。由于函数体中有 a = a + 1 ,所以函数只在局部作用域查找 a , 然后执行的时候,发现并没有 a 这个变量,故抛出异常。
我觉得这种解释非常的绕,而且不是很直观,很容易忘记。不知道各位 v 友有什么通俗一点的方式来描述这种行为~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.