这是我的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
Run Code Online (Sandbox Code Playgroud)
这是我的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
Run Code Online (Sandbox Code Playgroud)
为什么PYTHON在这种情况下更快?我不确定是不是因为我写了额外的代码,但它似乎是一个非常基本的循环.
aba*_*ert 11
这不是for循环慢,而是C++ iostreams.它甚至iostreams不是非常缓慢,1但是你正在endl为每一行做一个.
C++ endl不仅仅是'\n'它的同义词,它是一个io操纵器对象,当插入到流中时,插入'\n' 然后要求刷新流.刷新标准输出可能非常慢.
print另一方面,Python 不会刷新,除非你明确要求它; 否则,它只是写入sys.stdout,这是一个TextIOWrapper在缓冲区中积累的东西,并在它认为合适时刷新,这与C++完全相同iostreams.2
为了公平测试,请比较一下:
cout << "Test\n";
print("Test")
Run Code Online (Sandbox Code Playgroud)
… 或这个:
cout << "Test" << endl;
print("Test", flush=True)
Run Code Online (Sandbox Code Playgroud)
1.某些平台/编译器/优化的标志,它是相当缓慢.操纵者可能特别慢.因此,在解决此问题后,Python 仍可能胜过C++.但不是按11:1的比例.
2. Python还必须将您的字符串从Unicode转换为sys.stdout.encoding.但是,如果您使用的是3.4或更高版本,则所有类似ASCII的Unicode字符串都'test'将存储为ASCII字节,并对其进行编码即为无操作.