Найти - Пользователи
Полная версия: Укажите на ошибки!
Начало » Python для новичков » Укажите на ошибки!
1 2
pyuser
s0rg
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
Код явно для второго питона, поэтому вместо объявления do_strip лучше импортировать strip из модуля string - быстрее будет работать.
s0rg
string - он какбы deprecated, и почему один вызов будет работать быстрее другого?
pyuser
s0rg
почему один вызов будет работать быстрее другого
потому что у Вас по сути два вызова - вызов функции, вызывающей функцию :)
s0rg
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)
)))
pyuser
s0rg Убедили :). У меня уже месяцев 5 второго питона нет, заглянуть некуда :(.
Тогда str.strip вместо lambda.
Malinaizer
pyuser
s0rg Убедили :). У меня уже месяцев 5 второго питона нет, заглянуть некуда :(.
Тогда str.strip вместо lambda.
Пытаюсь понять ваш спор, что даказывает кусок кода выше, что
string.strip(str) == str.strip() ?
str.strip вместо lambda, почему, избыточность?
pyuser
Ни кто не спорит. Это все имеет отношение к общим рекомендациям по увеличению производительности. Практически во всех букварях рекомендуют для функций 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
Пытаюсь понять ваш спор, что даказывает кусок кода выше, что
string.strip(str) == str.strip() ?
Не рекомендуется использовать ключевое слово str в качестве имени переменной :)
А результат Вашего сравнения будет True
Malinaizer
pyuser
Не рекомендуется использовать ключевое слово str в качестве имени переменной :)

Я в курсе, это так для наглядности!

Спасибо вам большое, с вами росту быстрей!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB