разница в производительности

Я пытался сравнитьre.match а такжеre.search с помощьюtimeit модуль, и я обнаружил, что совпадение было лучше, чем поиск, когда строка, которую я хочу найти, была в начале строки.

>>> s1 = '''
... import re
... re.search(r'hello','helloab'*100000)
... '''
>>> timeit.timeit(stmt=s1,number=10000)
32.12064480781555


>>> s = '''
... import re
... re.match(r'hello','helloab'*100000)
... '''
>>> timeit.timeit(stmt=s,number=10000)
30.9136700630188

Теперь я знаю, что match ищет шаблон в начале строки и возвращает объект, если найден, но меня интересует, как работает поиск.

Выполняет ли поиск какое-либо дополнительное сопоставление после того, как строка найдена в начале, что замедляет ее?

Обновить

После использования кода Дэвида Робинсона я получил аналогичные ему результаты.

>>> print timeit.timeit(stmt="r.match('hello')",
...              setup="import re; s = 'helloab'*100000; r = re.compile('hello')",
...              number = 10000000)
49.9567620754
>>> print timeit.timeit(stmt="r.search('hello')",
...              setup="import re; s = 'helloab'*100000; r = re.compile('hello')",
...             number = 10000000)
35.6694438457

Итак, обновленный вопрос теперь почемуsearch превосходит?match

Ответы на вопрос(2)

Ваш ответ на вопрос