gpt4 book ai didi

python - 首次使用后重新分配时,局部变量上出现UnboundLocalError

转载 作者:行者123 更新时间:2023-12-03 08:33:22 24 4
gpt4 key购买 nike

以下代码可在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)行时,我在 (A)行获得了 UnboundLocalError: 'c' not assigned。正确打印了 ab的值。这使我完全困惑,原因有两个:
  • 为什么稍后在(B)行上声明,在(A)行上引发运行时错误?
  • 为什么按预期方式打印变量ab,而c引发错误?

  • 我能提出的唯一解释是,分配 c创建了 本地变量 c+=1,甚至在创建本地变量之前,它就比“全局”变量 c优先。当然,在变量存在之前“窃取”范围是没有意义的。

    有人可以解释这种现象吗?

    最佳答案

    Python对函数中的变量的处理方式有所不同,具体取决于您是从函数内部还是外部为其分配值。如果在函数内分配了变量,则默认情况下会将其视为局部变量。因此,当取消注释该行时,您将尝试在分配任何值之前引用局部变量c

    如果希望变量c引用该函数之前分配的全局c = 3,请输入

    global c

    作为函数的第一行。

    至于python 3,现在有
    nonlocal c

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

    关于python - 首次使用后重新分配时,局部变量上出现UnboundLocalError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64554600/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com