Python 正则 re.compile 真的必需吗
作者:笑笑布丁 发布时间:2021-12-27 17:12:24
背景:我在爬虫处理某个文本时,用到了re.findall(),而不是re.compile。远在新加坡的同事提出了质疑,认为以我的水平,不应该写出这样影响性能的代码,让我优化一下。我提出了反驳:既然使用了Python,就不应该太过考虑性能的问题,如果要考虑性能就使用C语言,而不是Python.他接着说:正是因为python性能不够,所以更应该考虑代码的优化,能做好就应该做到最好.最后,我没有回话,当然我也没有进行所谓的优化,以下我会给出我自己的观点.
re.compile()、re.findall()、re.search() 的作用与区别
1、re.compile()
Python里的re是支持正则表达式的模块,所谓的正则表达式就是匹配文本里符合条件的语句. re.compile()是根据包含正则表达式的字符串创建模式对象,以提高匹配效率.例如:
def test():
regex = r'(\d+) years old'
content = 'Alex is a 7 years old boy.'
reg = re.compile(regex)
result = re.search(reg, content).group()
print(result)
result = 7
2、re.search()
re.search()是在字符串开启查找模式,如其名:search.例如:
def test():
content = 'Alex is a 7 years old boy.'
result = re.search(r'(\d+) years old', content).group()
print(result)
result = 7
3、re.findall()
re.findall()是返回一个列表,列表里包含了所有符合条件的结果,例如:
def test():
content = 'Alex is a 7 years old boy.Bob is a 12 years old boy...'
result = re.findall(r'(\d+) years old', content)
print(result)
result = ['7', '12']
我们分歧在他认为我应该先用 re.complile 编译好正则之后,再匹配,正如我在re.compile举得例子. 你会说他说的没错啊,作者不应该顺从同事这个合理的要求,不改就算了还要在这里发文BB.我想说的是 抛开剂量谈毒性,都是耍流氓。对于数据来说抛开量级谈性能差异,都是耍流氓. 如果要处理的 文本是百万、千万、亿这个级别,我会做优化,但是对于个别刚上万的数据来说,我觉得没必要,业务流程真的不缺那0.0X秒,多写一行re.compile的时间远大于提示的时间了. 做好代码的优化很重要,特别是面对大量数据的时候,但是我们要想清楚,有时候并不是靠那几行re.compile就能提高多大的性能,精简流程,合理的设计模式才是重点. 工作中还是要做好和同事的沟通,不要和我一样,不然迟早会被别人唾弃.
根据下面评论的提示re.compile()那一行应该放在迭代外面的代码块里,相比图中的时间速度会有所提升.😀😀.但是我们的业务逻辑是和上图一样的,而不是在迭代之外.
来源:https://blog.csdn.net/qq_40244755/article/details/103369421
猜你喜欢
- MySQL 慢日志(slow log)是 MySQL DBA 及其他开发、运维人员需经常关注的一类信息。使用慢日志可找出执行时间较长或未走索
- 视频的播放过程可以简单理解为一帧一帧的画面按照时间顺序呈现出来的过程,就像在一个本子的每一页画上画,然后快速翻动的感觉。但是在实际应用中,并
- 数字序号① ①② ②③ &
- * 上有个有意思的话题叫细胞自动机:https://en.wikipedia.org/wiki/Cellular_automaton在2
- 假设你的变量叫做 MyArray,我们可作如下处理:Dim strDim strDelimiterstrDelimite
- TTS简介TTS(Text To Speech)是一种语音合成技术,可以让机器将输入文本以语音的方式播放出来,实现机器说话的效果。TTS分成
- 引言欢迎来到我们的系列博客《Python全景系列》!在这个系列中,我们将带领你从Python的基础知识开始,一步步深入到高级话题,帮助你掌握
- Jupyter Notebook内使用argparse报错在github上下载了代码来学习时,发现将其直接copy到jupyter note
- 非聚集索引,这个是大家都非常熟悉的一个东西,有时候我们由于业务原因,sql写的非常复杂,需要join很多张表,然后就泪流满面了。。。这时候就
- 功能描述抽奖系统包含如下特点:1、可给不同抽奖者设置不同的权重2、先从价值高的奖品开始抽3、已经中奖的人,不再参与后续的抽奖代码第一个数字表
- 前言关于python版本,我一开始看很多资料说python2比较好,因为很多库还不支持3,但是使用到现在为止觉得还是pythin3比较好用,
- 扰动的鲁棒性在之前我们讨论权重衰减(L2正则化)时看到的那样,参数的范数也代表了一种有用的简单性度量。简单性的另一个有用角度是平滑性,即函数
- 本文实例为大家分享了python利用tkinter实现屏保的具体代码,供大家参考,具体内容如下import randomimport tki
- 1. 关于列表更多的内容Python 的列表数据类型包含更多的方法。这里是所有的列表对象方法:list.``append(x)把一个元素添加
- 人一旦习惯了某些东西就很难去改,以及各种各样的原因,新的浏览器越来越多,而老的总淘汰不了。增长总是快于消亡导致了浏览器兼容是成了谈不完的话题
- 下载git客户端 FileàDefault Settingà Version Controlà GitPath to Git ex
- 下面写一个给大家做参考啊 create procedure sp_find(pfind varchar(500) BEGIN DECLAR
- python字符串过滤性能比较5种方法比较总共比较5种方法。直接看代码:import randomimport timeimport osi
- 1.实现效果2.实现代码# 导入所需库from tkinter import *import randomclass main:  
- 一、项目介绍爬取网址:CSDN首页的Python、Java、前端、架构以及数据库栏目。简单分析其各自的URL不难发现,都是https://w