2016-06-22 37 views
3

目前我正在試圖理解這段代碼在pythonpython區塊範圍 - 它是否類似於在函數內部提升的javascript?

def foo(a): 
    if a==12: 
    var = "Same" 
    else: 
    var = "different" 

我閱讀和理解的事實,Python不支持基於塊的作用域。因此,在函數內部創建的所有內容(無論是在循環內還是在條件語句中)都可以公開地提供給函數的其他成員。我還閱讀了範圍規則here。在這一點上,假設這些內部作用域變量是懸掛在函數內部的,就像在javascript中懸掛的一樣嗎?

+0

那麼Python並不完全具有變量聲明開始,因此很難與JavaScript的'var'提升進行比較。我知道你可以在給x分配一些東西后放一個'global x'聲明,它仍然可以工作,但這就是蘋果和橘子。 – Kevin

+0

@ jamesfranco - 這是不可能的。你爲什麼不開啓你的python解釋器並找出答案? –

+0

@Kevin除了'var'關鍵字之外,Python的聲明(或缺少)與JavaScript的不同? –

回答

4

你明白了。在沒有明確聲明爲global的函數中指定的任何名稱(使用Py3添加nonlocal來指示它不在本地作用域中,而是查看包裝作用域而不是直接跳轉到全局作用域)是從開頭的局部變量函數(在本地數組中保留空間),但在分配之前讀取它會引起UnboundLocalError

+0

這似乎也適用於頂級「模塊」級別。我現在正在讀取一個引用變量(一個單例,就像它發生的)在文件中定義的類(!) – GreenAsJade