千家信息网

Python比C++快吗

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本篇内容介绍了"Python比C++快吗"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!众所周知,Py
千家信息网最后更新 2026年11月04日Python比C++快吗

本篇内容介绍了"Python比C++快吗"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

众所周知,Python 是动态语言,有全局解释器锁,比其他静态语言要慢,也正是这个原因,你也许会转向其他语言如 Java、C++,不过先等等,今天分享一个可以让 Python 比 C++ 还要快的技术,看完再决定要不要转吧。
今天的主角就是 Numba,Numba 是一个开源的即时编译器(JIT compiler),可将 Python 和 NumPy 的代码的转换为快速的机器码,从而提升运行速度。可以达到 C 或 FORTRAN 的速度。 这么牛逼是不是很难用呢?No,No,No,So easy,你不需要替换 Python 解释器,不需要单独编译,甚至不需要安装 C / C ++ 编译器。只需将 Numba 提供的装饰器放在 Python 函数上面就行,剩下的就交给 Numba 完成。举个简单的例子:

from numba import jitimport random@jit(nopython=True)def monte_carlo_pi(nsamples):    acc = 0    for i in range(nsamples):        x = random.random()        y = random.random()        if (x ** 2 + y ** 2) < 1.0:            acc += 1    return 4.0 * acc / nsamples

Numba 是专为科学计算而设计的,在与 NumPy 一起使用时,Numba 会为不同的数组数据类型生成专门的代码,以优化性能:

@numba.jit(nopython=True, parallel=True)def logistic_regression(Y, X, w, iterations):    for i in range(iterations):        w -= np.dot(((1.0 /              (1.0 + np.exp(-Y * np.dot(X, w)))              - 1.0) * Y), X)    return w

现在我们来看看,同样的代码,使用 Numba 前后与 C++ 的性能对比。比如说我们要找出 1000 万以内所有的素数,代码的算法逻辑是相同的: Python 代码:

import mathimport timedef is_prime(num):    if num == 2:        return True    if num <= 1 or not num % 2:        return False    for div in range(3, int(math.sqrt(num) + 1), 2):        if not num % div:            return False    return Truedef run_program(N):    total = 0    for i in range(N):        if is_prime(i):            total += 1    return totalif __name__ == "__main__":    N = 10000000    start = time.time()    total = run_program(N)    end = time.time()    print(f"total prime num is {total}")    print(f"cost {end - start}s")

执行耗时:

total prime num is 664579cost 47.386465072631836s

C++ 代码如下:

#include #include #include using namespace std;bool isPrime(int num) {    if (num == 2) return true;    if (num <= 1 || num % 2 == 0) return false;    double sqrt_num = sqrt(double(num));    for (int div = 3; div <= sqrt_num; div +=2){       if (num % div == 0) return false;    }     return true;}int run_program(int N){    int total = 0;    for (int i; i < N; i++) {        if(isPrime(i)) total ++;    }    return total;}int main(){    int N = 10000000;    clock_t start,end;    start = clock();    int total = run_program(N);    end = clock();    cout << "total prime num is " << total;    cout << "\ncost " << (end - start) / ((double) CLOCKS_PER_SEC) << "s\n";    return 0;}
$ g++ isPrime.cpp -o isPrime$ ./isPrimetotal prime num is 664579cost 2.36221s


c++ C++ 确实牛逼,才 2.3 秒,不过好戏还在后头,现在我们使用 Numba 来加速一下,操作很简单,不需要改动原有的代码,先导入 Numba 的 njit,再在函数上方放个装饰器 @njit 即可,其他保持不变,代码如下:

import mathimport timefrom numba import njit# @njit 相当于 @jit(nopython=True) @njitdef is_prime(num):    if num == 2:        return True    if num <= 1 or not num % 2:        return False    for div in range(3, int(math.sqrt(num) + 1), 2):        if not num % div:            return False    return True@njitdef run_program(N):    total = 0    for i in range(N):        if is_prime(i):            total += 1    return totalif __name__ == "__main__":    N = 10000000    start = time.time()    total = run_program(N)    end = time.time()    print(f"total prime num is {total}")    print(f"cost {end - start}s")

运行一下,可以看出时间已经从 47.39 秒降低到 3 秒。

total prime num is 664579cost 3.0948808193206787s

相比 C++ 的 2.3 秒还是有一点慢,你可能会说 Python 还是不行啊。等一等,我们还有优化的空间,就是 Python 的 for 循环,那可是 1000 万的循环,对此,Numba 提供了 prange 参数来并行计算,从而并发处理循环语句,只需要将 range 修改为 prange,装饰器传个参数:parallel = True,其他不变,代码改动如下:

import mathimport timefrom numba import njit, prange@njitdef is_prime(num):    if num == 2:        return True    if num <= 1 or not num % 2:        return False    for div in range(3, int(math.sqrt(num) + 1), 2):        if not num % div:            return False    return True@njit(parallel = True)def run_program(N):    total = 0    for i in prange(N):        if is_prime(i):            total += 1    return totalif __name__ == "__main__":    N = 10000000    start = time.time()    total = run_program(N)    end = time.time()    print(f"total prime num is {total}")    print(f"cost {end - start}s")

现在运行一下:

python isPrime.pytotal prime num is 664579cost 1.4398791790008545s

才 1.43 秒,比 C++ 还快,Numba 真的牛逼!我又运行了两次,确认自己没看错,平均就是 1.4 秒

"Python比C++快吗"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

代码 C++ 运行 就是 语言 循环 编译 内容 函数 参数 性能 更多 知识 编译器 解释器 还是 速度 解释 不同 不行 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东猪兼强互联网科技有限公司 河南云网互联网络科技有限公司 互联网科技财经 互联网科技公司怎么样 中国互联网科技发展 新浪科技互联网 赫美联合互联网科技 须眉科技是互联网公司吗 互联网大会黑科技排名 南山科技园互联网公司有哪些 厦门比较好的科技互联网公司 互联网科技革命什么开始 互联网5g黑科技有哪些 银川新华互联网科技学校联系电话 中国互联网公司排名锤子科技 阿里互联网科技企业 世界互联网领先科技成果获奖 启辰互联网科技 广东猫王互联网科技有限公司电话 伍佰万互联网科技是干嘛的 互联网科技活动banner 互联网与科技发展 成都互联网科技公司 互联网科技ppt模板 左右互联网络科技 太原新华互联网科技学校怎么样 现代科技和互联网有关系吗 科技与互联网的利与弊 江苏互联网智能科技产品出厂价 科技和互联网行业的特点
0