[英]why simple for loop with if condition is faster than conditional generator expression in python
[英]Is generator faster than while loop in python?
問題很簡單,我有以下代碼在python2中做同樣的事情:
for _ in range(n): # or xrange(),they have similar performance according to my test
pass
i = 0
while i < n:
i+=1
pass
for循環比while循環快,當n = 1000000時,每個循環大約花費0.105544和0.2389421
def generator(n):
i = 0
while i < n:
yield i
i += 1
我希望您看到的性能差異與在Python中定義代碼的哪些部分以及在解釋器內部定義的部分有關(對於Cpython,在C語言中)。 例如,在for
循環情況下,對next
的調用將在C中處理,對於range
或其他內置可迭代的函數,該功能的實現也將在C中進行,因此它可能非常快。 另一方面, while
循環中的邊界檢查是一個Python表達式,需要在循環的每個遍歷中對其求值。 Python代碼幾乎總是比C代碼慢,因此,在某些情況下for
循環可能比while
循環更快,這並不太令人震驚。
但是請注意,這兩種循環可能都比您在其中進行的任何有用工作都要快得多。 幾乎永遠不值得將精力集中在像這樣的不同類型的循環之間的很小的性能差異上,而不是將精力集中在算法復雜性或數據結構效率之類的較大問題上。
唯一的例外是,如果您對代碼進行了大量分析,發現特定循環是特定程序的最大性能瓶頸。 如果是這種情況,請微優化您的心臟。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.