我们说我有一个代码:
import re
docid_re = re.compile(r'<DOCID>([^>]+)</DOCID>')
doctype_re = re.compile(r'<DOCTYPE SOURCE="[^"]+">([^>]+)</DOCTYPE>')
datetime_re = re.compile(r'<DATETIME>([^>]+)</DATETIME>')
我也可以这样做:
>>> import re
>>> docid_re = r'<DOCID>([^>]+)</DOCID>'
>>> doctype_re = r'<DOCTYPE SOURCE="[^"]+">([^>]+)</DOCTYPE>'
>>> datetime_re = r'<DATETIME>([^>]+)</DATETIME>'
>>> docid_re, doctype_re, datetime_re = map(re.compile, [docid_re, doctype_re, datetime_re])
>>> docid_re
<_sre.SRE_Pattern object at 0x7f0314eee438>
但是当我使用map()
时,速度或内存是否有任何实际好处?
答案 0 :(得分:1)
如果您正在编译正则表达式的批次,那么map
可能有助于避免查找re
所涉及的查找费用,然后在每次调用时获取其compile
属性;使用map
,您只需查看map
一次,re.compile
一次,然后无需进一步查找即可反复使用。当然,当你需要构建一个list
来使用它时,你可以节省开支。实际上,你需要大量的正则表达式才能达到map
值得你这么做的地步;三,这可能是一种损失。
即使它确实有所帮助,它也是最微小的微观优化。我会这样做,如果它使代码更清洁,性能是最好的三级关注。有些情况(例如,将整数的大文本文件解析为int
),其中map
可能是一个很大的胜利,因为启动它的开销可以通过减少的查找和Python字节代码来补偿执行开销。但这不是其中之一,而且这些案件非常罕见,不值得担心99.99%的时间。
答案 1 :(得分:1)
不要听任何人 - 只是测量它!您可以使用timeit模块。但请记住,&#34; premature optimization is the root of all evil&#34; (c)Donald Knuth。
顺便说一句,回答你的问题&#34;不,它根本没有帮助&#34;。