2017-01-02 54 views

回答

2

事实上,您将eggs重新绑定到本地范围eggs = 'spam local'是触发此事件的原因。

的Python认为eggs会在局部范围内由于该转让,当它调用print期间看起来eggs涨它就会抱怨说,它正试图执行后(前行分配引用变量(eggs)印刷品)。

一般来说,我还没有看到任何需要你想要做的事情,无论哪种方式,你都可以通过使用global来向Python表明你将要改变一个名字全球范围内:

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

,或者传递值作为参数,这不会改变全局值,但使其可在本地补救参考失败的第一个打印通话过程中发现:

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

这两种方法有不同的s emantics当然:

  • 第一实质上是一种提示,告诉你的Python会引用/改变位于全球范围内的变量,所以它知道如何加载/存储它。
  • 第二个使eggs在本地范围内可用,并将其用作参数,其全局值为eggs作为其默认值。 eggsprint中的查找现在可用,而eggs = 'spam local'将改变位于本地范围中的eggs

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