python 性能差的原因_在这种情况下,python比C慢得多的原因是什么?

我在项目euler上解决了一些问题,我为问题10编写了相同的函数…

令我惊讶的是C解决方案在大约4秒内运行,而python解决方案大约需要283秒.我正在努力向自己解释为什么C实现比python实现快得多,实际发生了什么呢?

C:

#include

#include

#include

int is_prime(int num)

{

int sqrtDiv = lround(sqrt(num));

while (sqrtDiv > 1) {

if (num % sqrtDiv == 0) {

return(0);

} else {

sqrtDiv--;

}

}

return(1);

}

int main ()

{

clock_t start = clock();

long sum = 0;

for ( int i = 2; i < 2000000; i++ ) {

if (is_prime(i)) {

sum += i;

}

}

printf("Sum of primes below 2,000,000 is: %ld\n", sum);

clock_t end = clock();

double time_elapsed_in_seconds = (end - start)/(double)CLOCKS_PER_SEC;

printf("Finished in %f seconds.\n", time_elapsed_in_seconds);

}

Python:

from math import sqrt

import time

def is_prime(num):

div = round(sqrt(num))

while div > 1:

if num % div == 0:

return False

div -= 1

return True

start_time = time.clock()

tsum = 0

for i in range(2, 2000000):

if is_prime(i):

tsum += i

print tsum

print('finished in:', time.clock() - start_time, 'seconds')

最佳答案 这是CPython(实现)在这种情况下很慢,而不是Python必然. CPython需要解释字节码,它几乎总是比编译的C代码慢.它只是比同等的C代码做更多的工作.理论上,每次调用sqrt都需要查找该函数,而不仅仅是调用已知地址.

如果你想要与Python相媲美的速度,你可以使用类型注释源代码并使用Cython进行编译,或者尝试使用Pypy运行以获得一些JIT性能.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值