栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

用Python编译正则表达式

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用Python编译正则表达式

嗯 这很奇怪。到目前为止,我的知识(以及从其他来源(从该问题获得的信息))提出了我的初步答案:

第一个答案
Python会缓存您使用的最后100个正则表达式,因此,即使您没有显式编译它们,也不必每次使用时都重新编译它们。

但是,有两个缺点:达到100个正则表达式的限制时,整个缓存将被删除,因此,如果您连续使用101个不同的正则表达式,则每次都会重新编译每个正则表达式。好吧,那是不太可能的,但是仍然如此。

其次,为了找出是否已经编译了正则表达式,解释器每次都需要在高速缓存中查找正则表达式,这确实需要一点额外的时间(但由于字典查找非常快,所以不需要很多)。

因此,如果您明确编译正则表达式,则可以避免执行此额外的查找步骤。

更新资料
我刚刚做了一些测试(Python 3.3):

>>> import timeit>>> timeit.timeit(setup="import re", stmt='''r=re.compile(r"w+")nfor i in range(10):n r.search("  jkdhf  ")''')18.547793477671938>>> timeit.timeit(setup="import re", stmt='''for i in range(10):n re.search(r"w+","  jkdhf  ")''')106.47892003890324

因此,似乎没有进行任何缓存。也许这是在特殊条件下timeit.timeit()跑步的怪癖?

另一方面,在Python 2.7中,区别并不明显:

>>> import timeit>>> timeit.timeit(setup="import re", stmt='''r=re.compile(r"w+")nfor i in range(10):n r.search("  jkdhf  ")''')7.248294908492429>>> timeit.timeit(setup="import re", stmt='''for i in range(10):n re.search(r"w+","  jkdhf  ")''')18.26713670282241


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/639252.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号