Python-首次使用后重新分配局部变量时出现unbundLocalERROR

发布于 2021-02-02 23:24:33

以下代码可在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)的注释时,会得到一个unbundlocalerror:"c"未在行(A)处分配。a和b的值打印正确。这让我完全困惑,原因有二:

  1. 为什么由于行(B)的后面的语句而在行(A)抛出运行时错误?
  2. 为什么在按预期方式打印变量a并引发错误?bc

我能想到的唯一解释是,局部变量c是由赋值c+=1创建的,它甚至在创建局部变量之前就已经取代了“全局”变量c。当然,一个变量在它存在之前“偷走”范围是没有意义的。

关注者
0
被浏览
307
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    Python对函数中的变量的处理方式不同,这取决于你是从函数内部还是外部为变量赋值。如果在函数中分配了变量,则默认情况下将其视为局部变量。因此,当你取消对行的注释时,你试图在为其赋值之前引用局部变量c。
    如果你希望变量c引用在函数之前分配的全局c=3,请输入

    global c
    

    作为函数的第一行。

    至于python 3,现在有

    nonlocal c
    

    可以用来引用最近的包含c变量的封闭函数范围。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看