为什么我的 Perl 脚本比等效的 Python 代码快一个数量级

Ann*_*May 5 python perl performance 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))
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

由于我对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))
Run Code Online (Sandbox Code Playgroud)

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