gpt4 book ai didi

python - 提高 Python 代码性能

转载 作者:太空宇宙 更新时间:2023-11-03 13:15:53 24 4
gpt4 key购买 nike

如何提高这段简单的 python 代码的性能?re.search 不是找到匹配行的最佳方法吗,因为它比 Perl 慢了将近 6 倍,或者我做错了什么?

#!/usr/bin/env python

import re
import time
import sys

i=0
j=0
time1=time.time()
base_register =r'DramBaseAddress\d+'
for line in open('rndcfg.cfg'):
i+=1
if(re.search(base_register, line)):
j+=1
time2=time.time()

print (i,j)
print (time2-time1)
print (sys.version)

此代码大约需要 0.96 秒才能完成(10 次运行的平均值)
输出:

168197 2688
0.8597519397735596
3.3.2 (default, Sep 24 2013, 15:14:17)
[GCC 4.1.1]

而下面的 Perl 代码在 0.15 秒内完成。

#!/usr/bin/env perl
use strict;
use warnings;

use Time::HiRes qw(time);

my $i=0;my $j=0;
my $time1=time;
open(my $fp, 'rndcfg.cfg');
while(<$fp>)
{
$i++;
if(/DramBaseAddress\d+/)
{
$j++;
}
}
close($fp);
my $time2=time;

printf("%d,%d\n",$i,$j);
printf("%f\n",$time2-$time1);
printf("%s\n",$]);


输出:

168197,2688
0.135579
5.012001

编辑:更正正则表达式 - 这会稍微降低性能

最佳答案

实际上,正则表达式的效率不如 Python 中的字符串方法。来自 https://docs.python.org/2/howto/regex.html#use-string-methods :

Strings have several methods for performing operations with fixed strings and they’re usually much faster, because the implementation is a single small C loop that’s been optimized for the purpose, instead of the large, more generalized regular expression engine.

str.find 替换 re.search 会给你更好的运行时间。否则,使用其他人建议的 in 运算符也会得到优化。

至于 Python 和 Perl 版本之间的速度差异,我将其归因于每种语言的内在质量:text processing - python vs perl performance

关于python - 提高 Python 代码性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30578861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com