2016-03-03 117 views
10

爲什麼下面的簡單循環沒有在循環結束時保存i的值?'For'循環在Python中的行爲

for i in range(1, 10): 
    print i 
    i = i + 3 

上面打印:

1 
2 
3 
4 
5 
6 
7 
8 
9 

但它應該打印:

1 
4 
7 
+0

可能[相關解釋](http://stackoverflow.com/questions/35618307/how-to-transform-string-into-dict/35618686#35618686)。 – Ian

+8

爲什麼會這樣工作?這完全違背了直覺。 – Andrey

+2

你的變量被設置在「for」中,打印出來,然後你再添加。如果你想要輸出,你應該「打印i + 3」 – miguels

回答

41

fori每次迭代中,從對象的下一個值被遍歷。無論你在循環中設置了i,都會被忽略。

for statement documentation

該套件隨後被執行一次,由該迭代器提供每個項目,按升序索引的順序。每個項目依次使用標準分配規則分配給目標列表,然後執行套件。

i是目標列表這裏,因此它被分配來自range(1, 10)對象的每個值。稍後將i設置爲其他內容不會改變表達式生成的range(1, 10)

如果您想要生成一個循環,而您要更改i,請改爲使用while循環;它每一次重考的條件通過:

i = 1 
while i < 10: 
    print i 
    i += 3 

,但它會更容易,只需使用一個range()了一步,前面生產值

for i in range(1, 10, 3): 
    print i 
+0

,我如何讓這不會發生? –

+15

@NishantSingh你可以控制你的範圍內的步驟(1,10,3)' – Ian

+0

好的答案!關鍵在於沒有測試正在進行。 for循環在python中是一個實際循環,一個迭代,而不是'do-test-repeat' for其他語言的循環。在java中,我認爲有'for each'循環,它更像Python循環;也許這樣的命名使得它更清楚該循環的行爲方式,對嗎? –