当前位置: 首页 > 后端技术 > Python

perl和python在vim处理文本中的性能对比

时间:2023-03-25 19:36:10 Python

终于想起账号了-_-!!perl和python在vim中处理文本的性能对比又是闲置的一天。想推手头的小项目,却迷失在如何给vim添加XXXHACKNOTE等标签上。强调一下,为了破解todo-vim插件(搜索大小写),在vimscript+内置perl的交互上花了不少功夫。在[2.]步骤,我找到了一篇文章,也很有帮助。有关于数据量的文章。其中有python、perl和vimscript。经过他的实践,python在处理文本方面比perl(在vIM中)快得多。作为一个python/perl双修士,有点不服气,认为不可能有3倍差距的可能。于是花时间重做benchmark细节1.生成测试文件perl-e'openmy$f,">","测试.txt";for($i=0;$i<100000;$++){print$f"\"value\"\n{\n\"wave\"\n\"wave\"\n\"wave\"\n\"wave\"\n}\n\n";}'文件879992行,6269943字节2.编写vim代码内容如下函数!test#pythonmod1()"没有常规方法letstart_time=localtime()echo("Startprocessing...")python3<Count()){if($curbuf->Get($lnum)eq'"value"'){$num=0;}elsif($curbuf->Get($lnum)=~'"wave"'){$curbuf->Set($lnum,'"wave'.$num.'"');$c+=1;$num+=1;}$lnum+=1}VIM::DoCommand("letc=".$c);EOF"redraw!echo("完成!\n全部替换".c."行\n耗时:".(localtime()-start_time)."Seconds")endfunctionfunction!test#perlmod()"普通版letstart_time=localtime()echo("开始处理...")perl<Count()){如果($curbuf->Get($lnum)=~/value/){$num=0;}elsif($curbuf->Get($lnum)=~/wave/){$curbuf->Set($lnum,'"wave'。$数。'"');$c+=1;$num+=1;}$lnum+=1}VIM::DoCommand("letc=".$c);EOF"redraw!echo("完成!\n替换".c.."行\n耗时:".(localtime()-start_time)."seconds")endfunction因为无法使用python2版本,vim只能运行python3python版本perl版本机器配置和operatingsystem操作系统配置用于省电的python常规版本。python非正规版第二次和第三次运行平均耗时7.334秒。python非正版第二、三次运行的平均时间为:6.667秒。6.667秒非正规版perl第一次运行,第三次平均耗时7.667秒。结论可以看出非正规版python稍微快一些,正规版是perl的性能领先者。因此,在我的软硬件条件下,vim+perl/python处理文本内容的性能不相上下。ps:原作者贴出的代码中,perl版本调用了vimredraw,python没有调用。我想这是性能差距的主要来源。PS2:Perl文字处理使用正则表达式,性能不错。而python不使用常规性能。很有意思