讓我們的標準Java for循環Python for循環中引發了什麼?
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
我可以清楚地看到所發生的事情在for循環。 i
初始化爲0.在每次迭代中檢查條件並進行增量。
這裏的Python版本
for i in range(0, 10):
print(i)
這個循環過程中發生了什麼事,詳細?
讓我們的標準Java for循環Python for循環中引發了什麼?
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
我可以清楚地看到所發生的事情在for循環。 i
初始化爲0.在每次迭代中檢查條件並進行增量。
這裏的Python版本
for i in range(0, 10):
print(i)
這個循環過程中發生了什麼事,詳細?
查看range()
內置函數的文檔,可以看到該函數「創建包含算術級數的列表」。在遍歷該列表,如果它直接傳遞給循環:
for i in range(0, 10):
print(i)
此代碼是基本相同
for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
print(i)
的in
關鍵字基本上是說在每一個元素提供的可迭代對象 - 在本例中是一個列表。 「對於列表中的每個項目」。循環知道何時停止,因爲範圍函數生成一個有限列表 - 這個列表有它的長度,這就是停止條件。在內部,當循環嘗試讀取超出範圍的索引時,會生成一個StopIteration
exception並觸發終止條件。
range(0,10)
返回從0號的列表至9 循環遍歷該列表中,每次迭代分配列表中的下一個號碼到i
的誤解是,這兩個環是不類似。
Java的表單從某個初始值開始打印出來,只要該值小於某個終端值,它就會繼續循環。
Python實際上將每一個元素都包含在你給它的任何迭代中,並且打印出它的內容而不增加任何增量。
因爲在這種情況下,可迭代是range
的結果,這是您獲取版本之間元素更改的行爲。
如果你正在使用Python < 3,range
是熱切生成元素的列表供您使用的功能。這種惰性的生成變體是xrange
,其中根據需要生成值。在這種情況下,由於您要在整個集合中循環完成,並且內存限制並不高,所以您不會注意到兩者之間的差異。
在Python> = 3中,range
behaves similar to xrange
因爲它是另一種序列類型,它也生成它需要的實時值。
這裏的關鍵區別在於,在一個Python循環變量代表包含在迭代的實際值,而Java用標準for
循環產生的值。
如果你使用的enhanced-for loop代替,那麼你會得到接近 Python的循環是如何工作的:
int[] list = {1, 2, 3, 4, 5, 6, 7, 8, 9}
for(int i : list) {
System.out.println(i);
}
所以你問Python是如何實現的。 – Maroun
是的,我在問python是如何實現的。 – Ogen
[瞭解Python的迭代器,迭代和迭代協議 - 它們究竟是什麼?]的可能的重複(http://stackoverflow.com/questions/9884132/understanding-pythons-iterator-iterable-and-iteration-protocols-what -exact) –