2013-10-11 105 views
5

我今天有一個數學考試和對測試的額外信用的問題之一是關於變量的範圍?

product = 1 
for i in range(1,7,2): 
    print i 
    product = product * i 
print i 
print product 

我們應該列出循環。這很容易的步驟;但它讓我思考,爲什麼這個程序運行?第二個print i似乎不適合我。我認爲i只存在for循環,然後get被銷燬,所以當你調用第二個print i時,沒有變量i,你會得到一個錯誤。

爲什麼i仍然是一個全局變量?

+0

使用'product * = i') – alexvassel

+0

我會的,這是我老師的考驗。這是離散數學,所以沒有很多人有編程經驗,所以我可以理解他的理由,不要在這個時候引入太多的python /編程習語。 – spitfiredd

回答

9

魔鬼在細節

Naming and binding

A嵌段是作爲一個單元執行的片Python程序文本。 以下是塊:模塊,函數體和類 的定義。

或者在簡單的話,一個for loop不是塊

範圍定義一個塊內的名稱的可見性。如果在塊中定義了本地變量 ,則其範圍包括該塊。如果 定義發生在功能塊中,則範圍擴展到包含在定義範圍內的任何塊 ,除非包含的塊爲名稱引入了不同的綁定 。

所以定義的任何變量是從定義的點的module塊的範圍,function,或class定義的端可見。

爲什麼我仍然是一個全局變量?

從命名的說法,我會打電話給i一個全局變量,如果你的突出顯示的代碼是模塊,而不是定義函數的一部分。

1

Python沒有塊範圍。在函數中定義的任何變量只能從該點可見,直到函數結束。

+1

-1:'Python沒有塊範圍.' ..這是不正確的。在Python中,塊範圍是模塊,函數或類定義。 – Abhijit