Почему мы должны использовать re.purge () в регулярном выражении python? - PullRequest
0 голосов
/ 19 февраля 2019

Каково значение очистки кэша при работе с re в Python.Это помогает в производительности или управлении памятью?Что произойдет, если мы проигнорируем это?Куда звонить re.purge()?

1 Ответ

0 голосов
/ 19 февраля 2019

Большинству кода не нужно беспокоиться об очистке кеша модуля re.Он приносит очень мало пользы от памяти и может на самом деле ухудшить производительность, если вы очистите его.

Кэш используется для хранения скомпилированных объектов регулярных выражений при использовании верхнего-level re.* функционирует напрямую, а не использует re.compile(pattern).Например, если вы использовали re.search(r'<some pattern>', string_value) в цикле, то модуль re скомпилирует '<some pattern>' только один раз и сохранит его в кэше, избегая необходимости повторной компиляции шаблона каждый раз.

Сколько таких объектов кэшируется и как управляется кеш, на самом деле это деталь реализации, но объекты регулярных выражений - это легковесные объекты, занимающие не более нескольких сотен байтов, и Python не будет хранить более нескольких сотенони (Python 3.7 хранит до 512).

Кеш также автоматически управляется, поэтому очистка обычно вообще не требуется.Используйте его, если вам необходимо учитывать время компиляции регулярных выражений в повторном пробном тесте, включающем функции re.*, или сами тестируете функции кэширования.Единственные места в стандартной библиотеке Python, которые вызывают re.purge(), находятся в тестах (в частности, в тестах test_re для модуля re и эталонном тесте утечки в наборе регрессионных тестов).

Если вашВ коде создается множество объектов регулярных выражений, которые вы намерены продолжать использовать, лучше использовать re.compile() и сохранять собственные ссылки на эти скомпилированные объекты выражений.См. re.compile() документацию :

Последовательность

prog = re.compile(pattern)
result = prog.match(string)

эквивалентна

result = re.match(pattern, string)

, но с использованием re.compile()и сохранение полученного объекта регулярного выражения для повторного использования более эффективно, если выражение будет использоваться несколько раз в одной программе.

Примечание : скомпилированные версии самых последних шаблоновпередается в re.compile() и функции сопоставления на уровне модуля кэшируются, поэтому программам, которые используют только несколько регулярных выражений за раз, не нужно беспокоиться о компиляции регулярных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...