为什么我的perl脚本比同等的python代码快一个数量级

时间:2017-05-18 11:45:26

标签: python performance perl dynamic-languages

我最近接手了Python3,并且比其他类似的动态语言(主要是Perl)慢得多。

在尝试学习Python的过程中,我遇到了几个在线编码挑战,Python通常比Perl慢至少10倍,并且使用至少2倍的内存。

研究这种好奇心我遇到了人们,问为什么Python比C / C ++慢,这应该是非常明显的,但不是任何将它与其他类似语言进行比较的帖子。还有这个信息丰富但过时的基准http://raid6.com.au/~onlyjob/posts/arena/,证实它相当缓慢。

我明确地询问标准的Python实现,而不是像pypy或类似的东西。

编辑: 我感到惊讶的原因来自codeeval.com上的结果页面。 这里有两个脚本来大写一行中每个单词的第一个字符。

Python3(3.4.3)v1

import sys
import re

def uc(m):
    c = m.group(1)
    return c.upper()

f = open(sys.argv[1], "r")
for line in f:
    print(re.sub(r"\b(\D)", uc, line))

Perl(5.18.2)

use strict;
use warnings "all";

open(my $fh, "<", "$ARGV[0]") or die;
while (<$fh>)
{
    s,\b(\D),uc $1,ge;
    print;
}
close $fh;

由于我对Python不是很熟悉,我还尝试了不同的版本,看看是否有任何不同。

Python3 v2:

import sys

f = open(sys.argv[1], "r")
for line in f:
    lst = [word[0].upper() + word[1:] for word in line.split()]
    print(" ".join(lst))

结果完全不同,如图所示:https://i.imgur.com/3wPrFk5.png(此图像中的Python结果来自v1,v2具有几乎相同的统计数据(+ 1 ms执行时间,〜相同的内存使用量)

0 个答案:

没有答案