2014-03-06 57 views
1

l作爲參數傳遞給range函數,其值內for循環被修改,但循環會爲10倍,而不是5確實範圍()在python無法評估它的參數每次

i = 0 
l = 10 
for i in range(l): 
    print i,l 
    global l  
    l = l-1 

輸出是

0 10 
1 9 
2 8 
3 7 
4 6 
5 5 
6 4 
7 3 
8 2 
9 1 

雖然我預計

0 10 
1 9 
2 8 
3 7 
4 6 

是否range()只有第一次評估值或別的東西,是什麼原因?

回答

4

不,for循環僅評估一次可迭代表達式。

range()被稱爲一旦for循環然後迭代結果。

for statement documentation引用:

表達列表計算一次;它應該產生一個可迭代的對象。

強調我的。

3

問題不在range評估其參數的頻率,但for item in sequence評估的頻率爲sequence。答案是一次。當你寫for i in range(l)range(l)被評估一次,就是這樣。

0

範圍(l)被評估一次,正在更新的是打印語句中l的值。