【问题标题】:Understanding scope of a variable defined in global scope in python [duplicate]了解python中全局范围内定义的变量的范围[重复]
【发布时间】:2020-08-16 22:29:59
【问题描述】:
num = 0
def func():
    print(num)
func()

上面的函数应该打印变量 num 保存的值,它可以工作。这样,我会假设func 可以访问num。但是当我尝试在函数内更改 num 的值时,它给了我一个错误。 UnboundLocalError: local variable 'num' referenced before assignment

num = 0
def func():
    print(num)
    num += 1
func()

为什么会这样?

【问题讨论】:

  • 这是预期行为,请参阅stackoverflow.com/questions/370357/…
  • 在函数内部使用global num
  • 但这让我很好奇,如果我可以打印,为什么我不能添加一些东西呢?
  • Python 编译器在函数体中看到num = ...,并假定num 是一个局部变量。当它没有看到 num = ... 时,它假定它是一个全局的
  • 读取链接的副本:stackoverflow.com/questions/370357/…

标签: python scope


【解决方案1】:

num 变量不在函数的本地范围内,因此您不能在函数内部修改它,因为该变量包含不可变数据类型 (int)。 您可以利用 global 关键字或在函数内定义变量。 num = 0 def func(): global num print(num) num += 1 func()

【讨论】:

  • num 变量在本地范围内,这就是问题所在。变量所指的类型不影响它是否可以修改。
  • num 变量在什么范围内是本地的?到功能范围?我猜不会。它目前与该功能在同一范围内。这是问题 num +=1 首先评估右手并且在运行时没有 num 变量可以修改,因为原始 num 是不可变的。如果 num 是一个列表,就不会有问题
  • 没有。用一个列表试试,你会得到完全相同的错误,问题是numfunc 本地的,这就是错误消息告诉你的内容 .你关于可变性在这里相关的想法是非常错误的
猜你喜欢
  • 2016-11-13
  • 2015-08-07
  • 2013-04-11
  • 2019-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 1970-01-01
相关资源
最近更新 更多