如果可以从本地范围中读取巨大的变化,那么为什么我不能打印全局变量



我不知道为什么我看到UnboundLocalError

def spam():
        print(eggs)
        eggs = 'spam local'
eggs = 'global'
spam()

谁能解释为什么?

您将eggs重新固定到本地范围的事实是触发的。

python认为eggs将由于该分配而在本地范围中,当它在致电print期间看起来eggs时,它将抱怨它正在执行作业之前引用变量(eggs)打印)。

通常,我还没有看到任何需要您要做的事情的东西,无论哪种方式,您都可以通过使用global来使其工作起来范围:

def spam():
    global eggs
    print(eggs)
    eggs = 'spam local'

或将值作为参数传递,这不会在全球上改变该值,而是可以在本地使用该值,以补救在第一个打印呼叫期间找不到的参考文献:

def spam(eggs=eggs):
    print(eggs)
    eggs = 'spam local'

这两种方法当然具有不同的语义:

  • 第一个本质上是一个提示,告诉Python您将参考/更改全局范围中的变量,因此它知道 如何加载/存储它。
  • 第二个使eggs通过将其用作参数可用,将eggs的全局值连接为默认值。print中的eggs查找现在可以使用eggs = 'spam local',而CC_13将更改位于本地范围的eggs

您可以根据试图尝试的内容选择。

最新更新