2013-07-15 82 views
12

在Python中,有兩種很好的方式可以多次重複某個動作。其中一個是while循環,另一個是 - for循環。因此,讓我們有兩個簡單的代碼片段,來看一看:for或while循環做n次

for i in range(n): 
    do_sth() 

另:

i = 0 
while i < n: 
    do_sth() 
    i += 1 

我的問題是他們的更好。當然,第一個在文檔示例和各種可以在互聯網上找到的代碼非常常見的代碼更加優雅和簡短,但另一方面,它會創建一個完全無用的整數列表,以便循環他們。這不是浪費記憶,特別是就大量迭代而言?

那麼你認爲,哪種方式更好?

+0

可能重複[如何重複函數n次](http://stackoverflow.com/questions/7359828/how-to-repeat-a-function-n-times) –

回答

21

但另一方面,它創建了一個完全無用的整數列表來循環它們。這不是浪費記憶,特別是就大量迭代而言?

這就是xrange(n)的用途。它避免了創建數字列表,而只是提供了一個迭代器對象。

在Python 3中,xrange()被重命名爲range() - 如果您想要一個列表,您必須通過list(range(n))專門請求它。

+0

在你最後一句話中,我認爲你的意思是'list(range(n))' – SethMMorton

+1

我想說明的是,儘管內存效率較低(沒有'xrange'),for循環要快得多,沒有額外的比較和增加。 –

+0

很高興知道這一切!非常感謝你。 :) – Sventimir

11

由於它甚至不需要創建int對象,所以它的重量比xrange(和while循環)要輕。這也同樣適用於Python2和Python3

from itertools import repeat 
for i in repeat(None, 10): 
    do_sth() 
+0

另一方面,它需要導入itertools,這有點不方便。琥珀的答案看起來更好。 – Sventimir

+6

代碼高爾夫不方便。不知道爲什麼人們認爲進口是某種問題。除了真正的程序有一堆進口和itertools有很多你應該使用的東西。 –

+0

嗯,我認爲當你可以用核心語言做一些與模塊一樣好的東西時,爲什麼要導入?Itertools對於某些目的是非常有用的,但我可以想象很多Python腳本在沒有它的情況下很好地工作。這就是爲什麼它是一個模塊,而不是核心Python。 :) – Sventimir

2

在大多數編程語言的根本區別在於除非意外發生時一個for循環將總是重複n次,然後用while循環完成它可以重複0 times, 1, more or even forever,這取決於給定的條件,在每個循環開始時總是爲真,在退出循環時總是爲假(對於具有它的語言,完整性爲do ... while循環(或repeat until))始終執行至少一次不保證第一次的前提條件ecution)。

所以你的問題的答案是'這一切都取決於你想要做什麼'!