Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 11, 2014 23:41:20

Nata
От:
Зарегистрирован: 2010-10-02
Сообщения: 87
Репутация: +  6  -
Профиль   Отправить e-mail  

Регулярное выражение, вернуть последнее совпадение.

когда вы запускаете

timeit "import re; r = re.compile(r'.*/(.+)'); r.search('/home/test/soft/print.sh').group(1)"
он ведь каждый раз делает import re?



Офлайн

#2 Окт. 12, 2014 00:05:50

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

Регулярное выражение, вернуть последнее совпадение.

Nata
он ведь каждый раз делает import re?
Ну да, каждый раз.

[guest@localhost ~]$ python3 -mtimeit "import os"
1000000 loops, best of 3: 0.889 usec per loop
[guest@localhost ~]$ python3 -mtimeit "import re"
1000000 loops, best of 3: 0.881 usec per loop
[guest@localhost ~]$

При сравнении регулярных выражений и basename() это роли не играет, а при сравнении с .rsplit() той вообще импорт не требуется никакой.

Можно дальше рассмотреть:
А что будет, если в пути есть только имя файла? Какой из этих всех кодов отвалится? :)



Отредактировано py.user.next (Окт. 12, 2014 00:06:01)

Офлайн

#3 Окт. 12, 2014 00:32:00

bs0d
Зарегистрирован: 2014-02-01
Сообщения: 76
Репутация: +  2  -
Профиль   Отправить e-mail  

Регулярное выражение, вернуть последнее совпадение.

py.user.next
и опять победителем выходит rsplit

Офлайн

#4 Окт. 12, 2014 01:00:37

Nata
От:
Зарегистрирован: 2010-10-02
Сообщения: 87
Репутация: +  6  -
Профиль   Отправить e-mail  

Регулярное выражение, вернуть последнее совпадение.

py.user.next
Какой из этих всех кодов отвалится?
мой регекс :D
я сразу сказала, что ваш лучше…
py.user.next
а при сравнении с .rsplit() той вообще импорт не требуется никакой.
вот поэтому сравнение rsplit VS basename/re.search в вашем случае необъективно



Отредактировано Nata (Окт. 12, 2014 01:11:57)

Офлайн

#5 Окт. 12, 2014 01:41:01

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10014
Репутация: +  857  -
Профиль   Отправить e-mail  

Регулярное выражение, вернуть последнее совпадение.

Nata
вот поэтому сравнение rsplit VS basename/re.search в вашем случае необъективно
Так они отдельно и стоят там, потому что у первых трёх есть импортирование. Импортирование - использование библиотеки, а вызов метода у строки - использование ядра.

bs0d
и опять победителем выходит rsplit
Не, ну, можно же найти, где он не подойдёт. Регулярки тут изначально, чтобы показать общий способ выделения какого-то фрагмента из строки. Изначально, если сравнивать обработку пути, то нужно сравнивать только basename() и .rsplit(), ну, может быть, ещё .partition() и .rpartition() рассмотреть. :)



Отредактировано py.user.next (Окт. 12, 2014 01:47:00)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version