7

总有人说 Python 不如 C/C++、Java 等其他语言效率高,也建议用 C 写瓶颈部分。但我从来没有遇到过这样的问题,可能是因为大部分时间是你解决问题的方式而不是语言的效率来打扰。

任何人都可以说明任何真实情况吗?一些简单的代码会很棒。

4

3 回答 3

6

在 SO 上已经有一个答案:Python 比 C++ 更快更轻吗?. 它引用了我想在这里首先引用的计算机语言基准游戏。

因此,Python(在不使用内置 C 代码时)在进行严肃计算时要慢得多。

于 2013-06-12T08:53:49.513 回答
2

使用插入排序进行实际比较,如您所见,C 更快。请注意,这些是一对一的尝试,在现实世界中,您只需使用 Python 的排序,它使用https://en.wikipedia.org/wiki/Timsort并且效率更高。结果:

Python

real  0m0.034s
user  0m0.028s
sys   0m0.008s

C

real  0m0.003s
user  0m0.000s
sys   0m0.000s

Python中的第一个

#!/usr/bin/python

a = [16, 7, 4, 10, 18, 15, 6, 12, 13, 5, 11, 14, 17, 8, 2, 9, 19, 3, 1]
print 'Unsorted: %s' % a

def insertion_sort(a):
    for j in range(1, len(a)):
        key = a[j]
        i = j - 1
        while i >= 0 and a[i] > key:
        a[i+1] = a[i]
        i = i - 1
    a[i+1] = key
    return a

# execute the sort
print 'Sorted: %s' % insertion_sort(a)

C中的第二个

#include <stdio.h>
#include <stdlib.h>

/*
    Compile with: 

    cc insertion-sort.c -o insertion-sort
*/
int main(int argc, char **argv) 
{
   int a[20] = {16, 7, 4, 10, 18, 15, 6, 12, 13, 5, 11, 14, 17, 8, 2, 9, 20, 19, 3, 1};
   int i, j, key;
   int len = 20;

   printf("Unsorted: [");
   for ( i = 0; i < len; i++ ) {
       printf(" %d ", a[i]);
   }
   printf("]\n");

   for ( j = 0 ; j < len ; j++ ) 
   {
       key = a[j];
       i = j - 1;
       while ( i >= 0 && a[i] > key ) {
           a[i + 1] = a[i];
           i = i - 1;
       }    
       a[i + 1] = key;
   }

   printf("Sorted: [");
   for ( i = 0; i < len; i++ ) {
       printf(" %d ", a[i]);
   }
   printf("]\n");
}
于 2013-06-12T09:03:44.663 回答
1

C 或 C++ 获胜并没有特定的情况。您用 C 或 C++ 编写的几乎所有 CPU 密集型代码的运行速度都将比等效的 Python 代码快很多倍。

如果您没有注意到,那仅仅是因为,对于您必须在 Python 中解决的问题,性能从来都不是问题。

于 2013-06-12T08:44:38.610 回答