Отвечая на этот вопрос (и прочитав этот ответ на аналогичный вопрос), я подумал, что Я знал, как Python кэширует регулярные выражения.
Но потом я подумал, что проверю его, сравнив два сценария:
- единственная компиляция простого регулярного выражения, затем 10 приложений этого скомпилированного регулярного выражения.
- 10 приложений некомпилированного регулярного выражения (где я ожидал бы немного худшую производительность, потому что регулярное выражение пришлось бы компилировать один раз, затем кэшировать, а затем искать в кеше 9 раз).
Однако результаты были ошеломляющими (в 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
Это в 5,7 раза медленнее! В Python 2.7 все еще есть увеличение в 2,5 раза, что также больше, чем я ожидал.
Изменено ли кэширование регулярных выражений между Python 2 и 3? Документы, похоже, не предлагают этого.