Python变量范围错误

问题:

以下代码按照预期在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()

但是,当我取消注释(B)行时,我在(一个)行获得UnboundLocalError: 'c' not assignedab的值正确打印。这让我完全失望了两个原因:

  1. 为什么在行(一个)时抛出运行时错误,因为行(B)上的更新语句
  2. 为什么变量ab按预期打印,而c引发错误?

我可以想出的唯一的解释是,本地变量c由赋值c+=1创建,即使在创建局部变量之前,它也在“全局”变量c之前。当然,变量在存在之前“窃取”范围是没有意义的。
有人可以解释这个行为吗?

回答:

Python根据是否从函数中为其分配值而在函数中对变量进行不同的处理。如果您为变量分配任何值,则默认将其视为本地变量。因此,当您取消注释行时,您尝试引用一个局部变量,然后再分配任何值。
如果你想要变量c来引用全局c

global c

作为功​​能的第一行。
至于python 3,现在呢

nonlocal c

您可以使用它来引用具有c变量的最近的封闭函数范围。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Python variable scope error

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

61 + = 65