簡體   English   中英

為什么python在for循環中擊敗c ++?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM