2017-01-02 53 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

您可以根據您嘗試嘗試的內容來選擇。