加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

提高Python代码性能

发布时间:2020-12-20 11:43:24 所属栏目:Python 来源:网络整理
导读:如何提高这个简单的 python代码的性能? 不是re.search是寻找匹配线的最佳方法,因为它比Perl慢近6倍,或者我做错了什么? #!/usr/bin/env pythonimport reimport timeimport sysi=0j=0time1=time.time()base_register =r'DramBaseAddressd+'for line in open
如何提高这个简单的 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'DramBaseAddressd+'
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(/DramBaseAddressd+/)
    {
        $j++;
    }
}
close($fp);
my $time2=time;

printf("%d,%dn",$i,$j);
printf("%fn",$time2-$time1);
printf("%sn",$]);

输出:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读