2017-06-04 116 views
0

在我看來,下面的兩個語句在python3中做了同樣的事情。當我<x和範圍(x)中的i之間的區別?

while i < x: 
    print("hi") 
    i+=1 

for i in range(x): 
    print("hi") 

有沒有辦法,我在這裏失蹤的功能區別?

如果是這樣,你會在什麼情況下使用一個嗎?

+2

當你需要滿足條件時使用第一個,當你想要迭代序列時使用第二個。 –

+0

嗯,它們是否相等取決於循環之前「i」的值。 – enedil

回答

4

通常用於當你不確切地知道何時停止。 對於循環用於知道您要執行某些操作的次數。

例如: 你有一個數字,每次你做了一些計算,只有當結果小於給定限值時,則需要塗用停止循環,你不知道多少時間,你必須運行該功能。

在另一方面,如果你想要去的直通列表的n個元素,你可以使用一個更符合邏輯,因爲你知道這個列表的大小。

在您的例子是沒有區別的(也許只是基於表演講,timeit可以給你更多的信息)

編輯1 我試着用做同樣的功能和對於(10000倍0到15的整數之和)和對於循環更快。如果你可以使用它,你應該選擇這一項(也有少變量來設置):

版本

s = time.time() 
for i in range(10000): 
    t = 0 
    for j in range(15): 
     t += j 
print(time.time()-s) => 0.0132s 

版本

s = time.time() 
i = 0 
while i < 10000: 
    t = 0 
    j = 0 
    i += 1 
    while j < 15: 
     t += j 
     j += 1 

print(time.time()-s) => 0.0202s 

一個重要的一點也...與wh ile你可以有一個無限循環,因爲它是不可能的:p

+3

嚴格地說,也可以通過'for x in y:'''''''''''''可以是一個不會結束的生成器。 –

+0

你是對的:)我從來沒有想過這個!但是,你可能還需要一個「不正確的」,而在發電機的權利? –

+0

如果你將'xrange'替換爲'range'(在Python 2中 - 無論如何,'range'在Python 3中都是這樣工作的),你會得到一個稍微快一點的時間。並且更高效的內存利用率。 –

相關問題