嗯 这很奇怪。到目前为止,我的知识(以及从其他来源(从该问题获得的信息))提出了我的初步答案:
第一个答案
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)