Форум сайта python.su
36
s0rgКод явно для второго питона, поэтому вместо объявления do_strip лучше импортировать strip из модуля string - быстрее будет работать.do_strip = lambda a: a.strip()
def parse(infile):
with open(infile) as f:
for line in filter(bool, map(do_strip, f)):
p1, p2 = map(do_strip, line.split('-'))
if p1.endswith((' n', ' v')):
p1 = p1[:-2]
p1 = p1.split(' ', 1)[1]
yield p1, p2
Офлайн
25
string - он какбы deprecated, и почему один вызов будет работать быстрее другого?
Офлайн
36
s0rgпотому что у Вас по сути два вызова - вызов функции, вызывающей функцию :)
почему один вызов будет работать быстрее другого
Офлайн
25
pyuser/usr/lib/python2.7/string.py:
потому что у Вас по сути два вызова - вызов функции, вызывающей функцию :)
# Strip leading and trailing tabs and spaces
def strip(s, chars=None):
"""strip(s [,chars]) -> string
Return a copy of the string s with leading and trailing
whitespace removed.
If chars is given and not None, remove characters in chars instead.
If chars is unicode, S will be converted to unicode before stripping.
"""
return s.strip(chars)
Офлайн
36
s0rg Убедили :). У меня уже месяцев 5 второго питона нет, заглянуть некуда :(.
Тогда str.strip вместо lambda.
Офлайн
0
pyuserПытаюсь понять ваш спор, что даказывает кусок кода выше, что
s0rg Убедили :). У меня уже месяцев 5 второго питона нет, заглянуть некуда :(.
Тогда str.strip вместо lambda.
string.strip(str) == str.strip() ?
Отредактировано (Март 20, 2012 21:21:41)
Офлайн
36
Ни кто не спорит. Это все имеет отношение к общим рекомендациям по увеличению производительности. Практически во всех букварях рекомендуют для функций map, filter и т.д. использовать встроенные функции, если такой возможности нет, то рекомендуется пользоваться либо списковыми включениями либо конструкцией for … in … (хотя, на вкус и цвет товарищей нет :)). Смотрите сами:
In [1]: from timeit import timeit
In [2]: print(timeit("list(map(lambda s: s.strip(), ('1', '2', '3', '4')))"))
2.331852861187665
In [3]: print(timeit("list(map(str.strip, ('1', '2', '3', '4')))"))
1.7636052207752648
MalinaizerНе рекомендуется использовать ключевое слово str в качестве имени переменной :)
Пытаюсь понять ваш спор, что даказывает кусок кода выше, чтоstring.strip(str) == str.strip() ?
Офлайн
0
pyuserНе рекомендуется использовать ключевое слово str в качестве имени переменной :)
Офлайн