2017-04-26 43 views
0

在這段代碼中,爲什麼ab在各自塊的末尾沒有被破壞?爲什麼對象允許在一個塊之後使用?

flag = True 
if flag: 
    a = 1 

for i in range(2): 
    b = 2 

print(a, b) 

相反,此代碼打印1 2。爲什麼Python允許這樣做?我何時可以依靠這種行爲?

+0

因爲Python沒有塊範圍。 –

回答

5

閱讀關於Python的範圍規則。簡而言之,保護範圍開始使用一個新的模塊:函數,方法,類,等等僅僅控制流語句(例如如果)不開始一個新的範圍。變量的範圍是從第一個定義到該範圍的末尾。

由於本示例只有一個範圍,因此每個變量從其第一個分配到文件末尾都是好的。

這足以解決問題嗎?

+1

請注意,一個變量甚至可以在其定義之前;這就是爲什麼像'def foo():print x;如果您的意圖是在分配新值之前輸出舊值,則x = 3。 (也就是說,如果你不認爲'global x'是一個定義。) – chepner

+0

非常正確;我限制了對特定問題的迴應,並提供了文檔的參考。 – Prune

相關問題