【问题标题】:Unexpected behavior of Python's variable scope [duplicate]Python的变量范围的意外行为[重复]
【发布时间】:2015-08-11 21:58:05
【问题描述】:

我对 Python 的变量作用域系统如何工作感到有些困惑。假设我有这样的情况:

a = 10
def test():
    print(a)

然后一切都按我的预期进行。 Python先查找局部变量a,找不到再查找全局变量。

但是,在这样的情况下:

a = 10
def test():
    print(a)
    a += 1
    print(a)

Python 抛出 UnboundLocalError 异常,显然来自第 3 行 (print(a))。对我来说,至少这一行似乎没有任何改变,而且我不明白为什么会有例外。

【问题讨论】:

  • 发帖前请正确搜索
  • @therealprashant 说回答这个问题的人。
  • @vaultah 有时确实会遇到一些需要回答的固执的人:)
  • @therealprashant 他们在欺骗中得到了回答,这是识别它的全部意义。如果你有更好的答案,把它写在那里,这样所有指向它的骗子都会受益。如果没有,请坐在你的手上。
  • @jonrsharpe 明白了。感谢您的反馈。我会确保以后不会发生这种情况

标签: python function variables scope


【解决方案1】:

由于python没有变量声明,函数范围内的每个变量赋值都被认为是局部的。因此,您始终必须指定该变量是全局变量:

a = 10
def test():
    global a
    print(a)
    a += 1
    print(a)
test()

【讨论】:

  • 推荐使用global 是个坏主意。
猜你喜欢
  • 1970-01-01
  • 2012-12-23
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
  • 1970-01-01
  • 2020-02-16
  • 2020-12-14
  • 1970-01-01
相关资源
最近更新 更多