这篇文章主要给大家介绍了关于Python中为何不要再用re.compile的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧。

如果大家在网上搜索Python 正则表达式,你将会看到大量的垃圾文章会这样写代码:

import repattern = re.compile('正则表达式')
text = '一段字符串'
result = pattern.findall(text)

这些文章的作者,可能是被其他语言的坏习惯影响了,也可能是被其他垃圾文章误导了,不假思索拿来就用。

在Python里面,真的不需要使用re.compile!

为了证明这一点,我们来看Python的源代码。

在PyCharm里面输入:

import rere.search

然后Windows用户按住键盘上的Ctrl键,鼠标左键点击search,Mac用户按住键盘上的Command键,鼠标左键点击search,PyCharm会自动跳转到Python的re模块。在这里,你会看到我们常用的正则表达式方法,无论是findall还是search还是sub还是match,全部都是这样写的:

_compile(pattern, flag).对应的方法(string)

例如:

def findall(pattern, string, flags=0):"""Return a list of all non-overlapping matches in the string.If one or more capturing groups are present in the pattern, returna list of groups; this will be a list of tuples if the patternhas more than one group.Empty matches are included in the result."""return _compile(pattern, flags).findall(string)

然后我们再来看compile:

def compile(pattern, flags=0):"Compile a regular expression pattern, returning a Pattern object."return _compile(pattern, flags)

看出问题来了吗?

我们常用的正则表达式方法,都已经自带了compile了!

根本没有必要多此一举先re.compile再调用正则表达式方法。

此时,可能会有人反驳:

如果我有一百万条字符串,使用使用某一个正则表达式去匹配,那么我可以这样写代码:

texts = [包含一百万个字符串的列表]
pattern = re.compile('正则表达式')
for text in texts:pattern.search(text)

这个时候,re.compile只执行了1次,而如果你像下面这样写代码:


2
3texts = [包含一百万个字符串的列表]
for text in texts:re.search('正则表达式', text)

相当于你在底层对同一个正则表达式执行了100万次re.compile。

Talk is cheap, show me the code.

我们来看源代码,正则表达式re.compile调用的是_compile,我们就去看_compile的源代码,如下图所示:

红框中的代码,说明了_compile自带缓存。它会自动储存最多512条由type(pattern), pattern, flags)组成的Key,只要是同一个正则表达式,同一个flag,那么调用两次_compile时,第二次会直接读取缓存。

综上所述,请你不要再手动调用re.compile了,这是从其他语言)带过来的陋习。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值.

我是一名python开发工程师,整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习,面试宝典。想要这些资料的可以关注小编,加Q裙851211580自取Python学习资料和学习视频,还有大神在线指导哦!

Python中请不要再用re.compile了相关推荐

  1. python中re.compile_什么是pythonre.compile函数?

    在这篇文章之中我们来了解一下关于python re.compile的知识,有些朋友可能是刚刚接触到python这一编程语言,对这一方面不是特别的了解,但是没关系接下来这篇文章将会来带大家来了解关于py ...

  2. 在Python中,val、exec和 compile 有什么区别?

    基本上 eval 上用来评估一个动态生成的 Python 表达式:exec 额外的用于执行动态生成的 python 代码. eval 和 exec 有以下两个差异 eval 只接受一个表达式,exec ...

  3. 请不要再用re.compile了!!!

    更新: 从知乎和stackoverflow的讨论看 https://zhuanlan.zhihu.com/p/70680488 https://stackoverflow.com/questions/ ...

  4. OpenCV 4.x 中请别再用HAAR级联检测器检测人脸!有更好更准的方法

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自OpenCV学堂. 引言 我写这篇文章是因为我很久以前写过一些文章,用了人脸检测,我当时用的都是HAAR级联检测器,导致最近几个人问我说这个H ...

  5. python中网页关闭再打开_Python Selenium 之关闭窗口close与quit的方法

    selenium关闭窗口有两个方法,close与quit,我们稍作研究便知道这两个方法的区别. 1.看源码或API 这是close()的说明: Closes the current window. 关 ...

  6. 剑灵私服服务器维护中请稍后再试,玩家惊曝:《剑灵》竟已有中文私服

    [17173专稿,未经授权禁止转载] 今日,一些玩家向17173记者爆料称,<剑灵>在国外已有私服可试玩,并支持中文补丁.记者立即进入该私服网站求证,发现该私服确实在运营,但尚未发现任何收 ...

  7. Python--详解Python中re.sub

    给出定义: re.sub(pattern, repl, string, count=0, flags=0)Return the string obtained by replacing the lef ...

  8. 在python中等号前面与后面分别是什么意思-Python中冒号等于(:=)是什么意思?...

    你发现的是伪代码伪代码是对计算机程序或其他算法的操作原理的非正式的高级描述. 该:=运营商实际上是赋值运算符.在python中,这只是=运算符. 要将此伪代码转换为Python,您需要知道所引用的数据 ...

  9. Python中动态编译函数compile(source, filename, mode, ......)参数filename的作用是什么?...

    动态编译函数compile调用语法如下: compile(source, filename, mode, flags=0, dont_inherit=False, optimize=-1) 其中的fi ...

最新文章

  1. CS131专题-6:图像特征(Blob检测、LoG算子、Harris-Laplacian)
  2. Unreal Engine 4 优化教程
  3. 开平方的 7 种算法
  4. char(nchar)与varchar(nvarchar)的区别以及选择
  5. 汽车之家基于 Flink + Iceberg 的湖仓一体架构实践
  6. TLS协议簇加解密流程
  7. 1024程序员 | 我如何从零基础转行成为一个自信的前端
  8. 11计算机专业vb试题答案,西华师范大学计算机VB试题及答案11
  9. 计算机器前传:结绳、算筹、算盘等手动计算发展史(公号回复“手动计算”下载PDF资料,欢迎转发、赞赏、支持科普)
  10. 使用dd命令测试裸盘性能评测
  11. 理解信号处理中的卷积
  12. 量子计算机 国外大学,全球首款纯硅量子计算机芯片在新南威尔士大学诞生
  13. B站下载姿势合集——亲测
  14. i.MX 6ULL 驱动开发 一:搭建开发环境
  15. MPLS基本部署实验解析(静态LSP与动态LSP)
  16. Mysql翻页查询数据重复怎么办?
  17. c语言程序设计服装销售系统报告,服装销售管理系统—C语言课程设计
  18. 计算机无法使用网络连接到服务器,电脑无法连接网络并诊断提示DNS服务器未响应的解决方法...
  19. 只需要努力,其他的都交给时光----三级网络学习总结
  20. 几个功能非常强大的学术翻译网站

热门文章

  1. 流量和延迟减半!挑战分布式数据库 TiDB 跨数据中心难题
  2. “鼠标屏幕取词”技术
  3. Graph Database 图数据库AgensGraph
  4. CentOS 7安装OpenMPI
  5. 泛型T不能转为int long 等这些基本类型
  6. matlab mif文件 负数,Quartus II mif 文件格式及rom如何输出负数
  7. 《2021年中国信创云操作系统行业市场研究报告》发布:安超云位居云操作系统领导者地位
  8. 【活动总结】0723-COC深圳社区职言职语第1季活动总结之第1视角
  9. A-LOAM源码阅读
  10. 【SQL高级教程】数据库学习笔记