Форум сайта python.su
FishHook
xam1816зачем вы постоянно используете map и filter? Это уже давно устаревшие и нерекомендуемые функции, они отнюдь не добавляют вашему коду ни читабельности ни перформанса. Зачем вы кастуете генератор к списку и тут же его итерируете?
Офлайн
Rikinиз примеров, конечно, хорошо, но учиться лучше не на примерах, а по учебникам
У нас пока то что мы из примеров перенимаем и приспосабливаем к себе.
Офлайн
FishHookКем не рекомендуемые? Устаревшие функции - это map и filter во втором питоне, так как во втором питоне они генерируют списки, что тратит память и время. В третьем питоне они, как и функции из модуля itertools, возвращают итераторы.
зачем вы постоянно используете map и filter? Это уже давно устаревшие и нерекомендуемые функции
>>> volunteer_datas = [ ... {'name': 'Ivanov', 'place': 'Moscow', 'status': 'Consultant'}, ... {'name': 'Pertov', 'place': 'St. Petersburg', 'status': 'Mentor'}, ... {'name': 'Schwarz', 'place': 'Viena', 'status': 'Trainer'}] >>> >>> def q(x): ... return x['name'] in ('Pertov', 'Schwarz') ... >>> filtered = filter(q, volunteer_datas) >>> >>> filtered <filter object at 0x7fd9e0943828> >>> >>> print(*filtered, sep='\n') {'name': 'Pertov', 'place': 'St. Petersburg', 'status': 'Mentor'} {'name': 'Schwarz', 'place': 'Viena', 'status': 'Trainer'} >>>
FishHookТам нет генератора. Знаешь, как отличить генератор от итерабельного? По наличию методов send() и throw(). Если их нет, то это не генератор.
Зачем вы кастуете генератор к списку
>>> filtered.send Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'filter' object has no attribute 'send' >>> filtered.throw Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'filter' object has no attribute 'throw' >>>
>>> filtered.__iter__ <method-wrapper '__iter__' of filter object at 0x7fd9e0943828> >>> filtered.__next__ <method-wrapper '__next__' of filter object at 0x7fd9e0943828> >>>
Отредактировано py.user.next (Янв. 15, 2022 02:06:21)
Офлайн
py.user.nextНапример мной. Да много кем, Марком Лутцем, в частности
Кем не рекомендуемые?
py.user.nextДа идёте вы, дорогой друг, нахер
Там нет генератора.
print(type((x for x in range(10)))) >>> <class 'generator'>
Офлайн
Вот ты пишешь xam1816'у, что у него там генератор
xam1816volunteer_datas = [ {"name": "Ivanov", "place": "Moscow", "status": 'Consultant'}, {"name": "Pertov", "place": "St. Petersburg", "status": 'Mentor'}, {"name": "Schwarz", "place": "Viena", "status": 'Trainer'}] for i in list(filter(lambda d: d['name'] in ("Pertov", "Schwarz"), volunteer_datas)): print(i)
FishHookА у него там генератора нет. Это значит, что ты не понимаешь, где генератор, а где не генератор, потому что не читал официальную доку с python.org по генераторам и не знаешь, что генератор очень точно определяется в любой ситуации как раз по наличию этих методов, которые есть только у генератора. Так вот прочитай её сначала, чтобы просто про генераторы всё узнать. Ты же про эти методы не знаешь, правда? А для чего эти методы в генераторе нужны, ты не думал? То есть ты и про сопрограммы не в курсе, получается.
xam1816
зачем вы постоянно используете map и filter? Это уже давно устаревшие и нерекомендуемые функции, они отнюдь не добавляют вашему коду ни читабельности ни перформанса. Зачем вы кастуете генератор к списку и тут же его итерируете?
FishHookГде он утверждает это не в контексте второго питона? Он может максимум сказать, что во втором питоне не используйте их, а используйте xrange(), itertools.imap(), itertools.ifilter() и прочее, чтобы не создавать списки каждый раз. Это максимум.
Марком Лутцем, в частности
FishHook(x for x in range(10))
>>> g = (x for x in range(10)) >>> g.send <built-in method send of generator object at 0x7f0bf3095620> >>> g.throw <built-in method throw of generator object at 0x7f0bf3095620> >>> g.close <built-in method close of generator object at 0x7f0bf3095620> >>>
>>> r = range(10) >>> r.send Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'range' object has no attribute 'send' >>> r.throw Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'range' object has no attribute 'throw' >>> r.close Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'range' object has no attribute 'close' >>>
>>> g = (x for x in range(10)) >>> next(g) 0 >>> next(g) 1 >>> g.close() >>> >>> next(g) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> next(g) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>>
>>> f = filter(None, 'abc') >>> f.close Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'filter' object has no attribute 'close' >>> >>> m = map(None, 'abc') >>> m.close Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'map' object has no attribute 'close' >>>
>>> r = range(10) >>> next(r) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'range' object is not an iterator >>>
>>> r = range(10) >>> next(r) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'range' object is not an iterator >>> >>> i = iter(r) >>> next(i) 0 >>> next(i) 1 >>> i.close() Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'range_iterator' object has no attribute 'close' >>>
>>> r = range(10) >>> >>> r.__iter__ <method-wrapper '__iter__' of range object at 0x7f8a6419fba0> >>> >>> r.__next__ Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'range' object has no attribute '__next__' >>>
Отредактировано py.user.next (Янв. 15, 2022 19:03:06)
Офлайн