[英]Why does python beat c++ in for loops?
這是我的C ++代碼:
#include <iostream>
#include <cstdio>
#include <ctime>
using namespace std;
int main() {
clock_t end;
clock_t start = clock();
for(int i = 0; i < 1000; i++) {
cout << "Test" << endl;
}
end = clock() - start;
double duration = end / (double) CLOCKS_PER_SEC;
cout << "Duration: " << duration << endl;
getchar();
return 0;
} // This takes around ~ .9 secs on average
這是我的python代碼:
import time
def foo():
start = time.time()
for i in range(1000):
print('Test')
print('Duration: {}'.format(time.time()-start))
# This takes around ~ .08 secs on average
為什么在這種情況下PYTHON更快? 我不確定是否是因為我是否編寫了額外的代碼,但這似乎是一個非常基本的for循環。
不是for
循環慢,而是C ++ iostreams
。 甚至不是iostreams
太慢了, 1而是您為每一行都做了一個endl
。
C ++ endl
不僅是'\\n'
的同義詞,它還是一個io操作器對象,當插入到流中時,它會插入'\\n'
然后要求將流刷新。 沖洗標准輸出可能非常慢。
另一方面,除非您明確要求,Python print
不會刷新。 否則,它只會寫入sys.stdout
,這是一個TextIOWrapper
,它將內容存儲在緩沖區中,並在認為合適時刷新該值,這與C ++ iostreams
幾乎相同。 2
為了進行公平的測試,請對此進行比較:
cout << "Test\n";
print("Test")
… 或這個:
cout << "Test" << endl;
print("Test", flush=True)
1.某些平台/編譯器/優化的標志,它是相當緩慢的。 機械手的速度可能特別慢。 因此,在解決此問題后,Python可能仍會擊敗C ++。 但不是以11:1的比例。
2. Python還必須將字符串從Unicode轉換為sys.stdout.encoding
。 但是,如果您使用的是3.4或更高版本,則將像'test'
類'test'
全都是ASCII的Unicode字符串存儲為ASCII字節,並且對其進行編碼是無操作的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.