python与c/c++相比有哪些优势?

简介:   理论上,python的确比C/C++慢(我对Java的开发没有经验,无法评论)。这一点不用质疑。 C/C++是编绎语言,直接使用的是机器指令,而python总是跑在的虚拟机上, 把一个逻辑直接转换为机器指令,和把同样的逻辑转换为字节码,然后再转换为机器码来执行相比, 总是要高上一大截,这一点,有各种各样的性能报告,我没有必要,也没有必要去做出这样一个报告来, 我记得大概的数值是一到两个数量级,用C++的话来说,这就是所谓的抽象惩罚。

  理论上,python的确比C/C++慢(我对Java的开发没有经验,无法评论)。这一点不用质疑。 C/C++是编绎语言,直接使用的是机器指令,而python总是跑在的虚拟机上, 把一个逻辑直接转换为机器指令,和把同样的逻辑转换为字节码,然后再转换为机器码来执行相比, 总是要高上一大截,这一点,有各种各样的性能报告,我没有必要,也没有必要去做出这样一个报告来, 我记得大概的数值是一到两个数量级,用C++的话来说,这就是所谓的抽象惩罚。

 但实践上,并非这么简单。 现实开发者领域,总是新手远多于高手,而从新手转为高手的时间相比,C/C++使用者花费的时间要比Python使用者多的多,保守的估计是5~10倍。

 这有两方面原因,一方面, C/C++(尤其是C++)的确是“博大精深”,而且总是有无穷无尽的细节,如果你是一个真正的开发者,你就会明白,实际上,就完全精通C/C++编绎器的选项,就足够学两门python了(一点都不夸张,我遇到很多做两三年的C++开发者,遇到一个编译或者链接问题都一筹莫展),而编绎器仅仅是C++开发过程中的最后一环而已,你可以不懂,但你总得要花时间去弄懂,因为,作为一个开发者,这是每天都要面对的问题,否则你给别人一个什么东西,象python一样,给个源文件?:)等你搞懂了指针,搞懂了数组,你还得搞懂指针与数组之间微妙的关系,等你搞懂了引用,你又不得不搞清引用与指针的区别,等你弄清了static 不同的用法,你又得明白vector> 与vector > 是不一样的,尽管只是小小一个空格,然后呢?学习STL(不要告诉我你在C++直接不用STL开发应用),实际上STL对于现实应用来说,太差强人意了,如要你常做字符处理,你就明白我说的是什么了,然后Boost?然后...,终于有一天,你可以开始真正做应用了,一年过去了?:) 另一方面,C++的开发经历绝对是充满荆棘和惊喜,以及沮丧,等你达到C/C++的自由王国,你一定是身经百战,但脑袋中还是有一个弦在紧绷,因为,一不留神,你就又得没日没夜的与奇妙的错误作战,这就是C++的开发感受。而且,C/C++的编码风格问题,一直是开发中充满争议的问题,我见过太多的关于风格问题的,毫无意义的争吵,但是很极少见到最终哪一种风格会令人每个人信服。

  说说python吧,学习过程是这样的,数据类型是如此面向问题,没有了令人讨论的unsigned , short , long,这种这辈子我都不愿弄懂的修饰, 类型连同支持的操作是如此的易懂,一旦你明白了,从Sequence / Mapping纬上看问题,很容易区分list与dict,一旦你明白了Imutable与mutable的意义,你就很容易猜到,tuple与list ,set与frozenset, 的不同方法,一旦明白了list 的inplace-op与string的 non-inplace-op实现,就很容易猜到方法的使用方式,另一方面,符合现实问题的逻辑表达式,通用的len, 简洁的 a, b = b,a,让你觉得一切井然有序,而且简单明晰。强大而广泛且标准库,都把问题与实现的距离接近到了可以动手的距离。语法中相当部分约束,减少了不必要语言风格争论(私下认为,那怕是一个最难看的固定语法都比临时去决策如何去用来的好),这也加速了开发的步伐,况且还有一个风格标准建议在PEP中。

  现实中,我不相信一个三个月或六个月的应用项目,使用python会比使用C++/C开发出来的系统慢。因为,开发者总是人, 拥有同样开发年限的C++/C程序员与python程序员对语言精通的程序是截然不同的,特别情况下,python程序员是已经真正进入了经验积累期,而可能C++/C程序员才刚刚有了开发的感觉。如果可以做这样一个实验,真实的情况,可能是这样的,python开发者,早就完成系统测试,着手进行性能的优化,考虑使用C/C++替换部分性能的瓶颈,而C/C++程序可能为集成测试的不完整在正在惴惴不安,信号是,由于程序员的技能问题,项目可能要延期。

附:python与c语言运行效率对比

   Python是个非常流行的解释型脚本语言。C是一个非常流行的编译语言。由于其编译的性质,导致C一般比Python要快,但是它是更底层的。相对的,Python编程更加快速和简单。译者注:在目前最权威的TIOBE编程语言排行榜上,Python和C语言分处榜上第6和第2的高位,在脚本语言和编译语言中分别坐着第二把交椅(第一把交椅分别是PHP和Java)。

  问题在于,Python程序(在没有输入的情况下)运行时所额外花费的时间相对C而言是否更加划算,以及运行时所用的时间是否比编程时间更加重要。

  系统程序

 我决定建立一个简单的程序,该程序可以处理以下公式的计算:

 { x + y = 14
    { x^2 + y^2 = 100

 我很快用Python写了一遍,找到了答案。然后,我将其翻译成C语言。我知道,在C语言中的同一程序会花费比Python更多一些的代码,但是这并非是我所注意的问题。在继续之前,让我们看看代码:

    Python:

    x = 1
    while x <= 14:
    y = 14 - x
    print str(x) + "|" + str(y)
    if x2 + y2 == 100:
    print "match"
    x = x + 1

    C:

    #include (<)stdio.h(>)
    int main()
    {
    int x, y, t;
    for (x = 1; x <= 14; x++) {
    y = 14 - x;
    printf("%d|%dn", x, y);
    if ((xx) + (yy) == 100)
    printf("matchn");
    }
    return 0;
    }
 我总是听说C语言永远是最快的语言之一。在命令端口运行这两个程序,我并没看出这两个的运行速度有任何差别。所以我打开Ubuntu的命令端口,并输入如下代码:
    time ./a.out

 (time指令,紧跟着可以脱离time指令而单独运行的普通指令,运行指令并计时——很明显,这里的测试对象是C程序。)我得到0.001秒real time(真实用时),而user time(用户用时)和system time(系统用时)都是0。

    接下来是Python:
    time python system.py

 结果有些吓人:0.017秒real time,0.012秒user time,0.004秒system time。
    当然了,real time的差别毕竟只有16毫秒,不过在长时间运行大量运算的大系统下这个差别就很明显了。

    百万程序

 我决定将这个设想付诸现实。我写了另一个程序,这个程序将0到1000000之间的所有整数,包括0,依次print输出。当然这和我之前提到的大量运算的情况还是不同的,不过还是给了计算机比较多一些需要print的内容。

    Python:

    i = 0
    while i (<) 1000000 print i
    i = i + 1

    C:

    #include (<)stdio.h(>)
    int main ()
    {
    int i;
    for (i = 0; i <>
    printf ("%dn", i);
    return 0;
    }

    然后是测试结果:

    C:

    real 0m24.625s
    user 0m0.652s
    sys 0m2.240s

    Python:

    real 0m29.805s
    user 0m1.984s
    sys 0m1.812s

结论

 我承认,每个语言都有其优势和弱点。但从以上结果看来,我只会在像上面这些小程序这样快捷的编程中,或为C程序建立原型的时候才会用Python,而在运行花费时间更重要的任务中,我无疑会选择C语言。

 

相关文章
|
7月前
|
人工智能 运维 Linux
可移植性在Python中的优势
可移植性在Python中的优势
169 1
|
17天前
|
算法 安全 编译器
C++优势
C++优势
73 29
WK
|
4月前
|
机器学习/深度学习 运维 Devops
Python语言在哪些场景下有很明显优势?
Python在多样场景中展现出显著优势,包括:通过强大的库如Pandas、NumPy、Scikit-learn等在数据科学与机器学习中的应用;利用简洁语法和集成能力在自动化运维及DevOps中的作用;借助Django、Flask等框架在网页开发与网络编程方面的表现;凭借快速迭代能力在原型开发中的效率;通过NumPy、SciPy等库在科学研究与工程计算的支持;以及因其易学特性在教育领域的普及。这些特点使Python成为多领域开发的优选语言。
WK
93 5
|
29天前
|
机器学习/深度学习 人工智能 算法
强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用
本文探讨了强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用,通过案例分析展示了其潜力,并讨论了面临的挑战及未来发展趋势。强化学习正为游戏AI带来新的可能性。
81 4
|
5月前
|
机器学习/深度学习 数据采集 数据可视化
Python数据分析入门涉及基础如Python语言、数据分析概念及优势。
【7月更文挑战第5天】Python数据分析入门涉及基础如Python语言、数据分析概念及优势。关键工具包括NumPy(数组操作)、Pandas(数据处理)、Matplotlib(绘图)、Seaborn(高级可视化)和Scikit-learn(机器学习)。流程涵盖数据获取、清洗、探索、建模、评估和展示。学习和实践这些将助你有效利用数据。
56 2
|
2月前
|
SQL 关系型数据库 数据库
优化Web开发流程:Python ORM的优势与实现细节
【10月更文挑战第4天】在Web开发中,数据库操作至关重要,但直接编写SQL语句既繁琐又易错。对象关系映射(ORM)技术应运而生,让开发者以面向对象的方式操作数据库,显著提升了开发效率和代码可维护性。本文探讨Python ORM的优势及其实现细节,并通过Django ORM的示例展示其应用。ORM提供高级抽象层,简化数据库操作,提高代码可读性,并支持多种数据库后端,防止SQL注入。Django内置强大的ORM系统,通过定义模型、生成数据库表、插入和查询数据等步骤,展示了如何利用ORM简化复杂的数据库操作。
67 6
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
【专栏】Python在人工智能领域的应用现状、优势及未来趋势
【4月更文挑战第27天】本文探讨了Python在人工智能领域的应用现状、优势及未来趋势。Python作为数据科学、机器学习、深度学习和自然语言处理的首选语言,拥有丰富的库如NumPy、Pandas、TensorFlow和NLTK等。其简洁易学、跨平台和活跃社区等特点促进了AI的普及和发展。未来,Python将在强化深度学习、融合新兴技术、提高可解释性和人才培养等方面持续发挥关键作用。
1865 2
|
3月前
|
算法 机器人 中间件
C++的主要优势是什么?
C++的主要优势是什么?
92 1
|
4月前
|
存储 缓存 C语言
|
3月前
|
数据处理 开发者 Python
探索Python中的列表推导式在Python编程中,列表推导式是一种简洁而高效的方法,用于从现有的列表创建新列表。本文将深入探讨列表推导式的用法、优势以及一些实际应用示例。
列表推导式是Python提供的一种强大工具,它允许开发者以更简洁的语法快速生成列表。通过结合循环和条件语句,列表推导式能够简化代码结构,提高开发效率。本文详细介绍了列表推导式的基本用法,并通过实例展示了其在数据处理、转换和过滤中的广泛应用。
54 0

热门文章

最新文章