2017-10-17 33 views
0

我在想變量只能在聲明後才能訪問。 但顯然,Python的名稱解析開始尋找從內到外。在內函數之後定義一個變量是一種不好的做法?

我的問題是,這在可讀性方面是不好的做法?我想知道這可能是Pythonista的常見知識,所以我可以從現在開始寫這種代碼。

def outer(): 
    def inner(): 
     print x 
    x = ‘foo’ 
    inner() 
>>> outer() 
>>> ‘foo’ 
+0

你說得對,該方法是在定義'x'前聲明的,但只有在你實際調用該方法('inner()')時才被評估,此時定義了'x'。 –

+0

謝謝!這是不好的做法嗎? – steve

+0

這種提醒我在getters和setter(https://stackoverflow.com/questions/2627002/whats-the-pythonic-way-to-use-getters-and-setters)我想這取決於你爲什麼想要這樣做。你不能說,這是不好的做法。 –

回答

0

當你調用inner(),它開始執行。在線print x它看到變量名稱x。然後它看起來功能的內部範圍inner,在那裏找不到變量x。然後看看外部範圍,即outer的範圍。此時已經定義了變量x(因爲它在inner()調用之前完成)並且使用了該變量。

+0

謝謝!我理解python如何查找變量。這是Pythonista的常用知識嗎?換句話說,如果這在可讀性方面可能是不好的做法,我會流浪。我應該在函數之前定義變量嗎? – steve

+0

是的,你可以稱之爲「常識」。任何非新手的Python程序員都應該能夠看看你的代碼並理解發生了什麼。 – alexis

相關問題