Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 19, 2009 23:47:37

qwer
От:
Зарегистрирован: 2009-03-30
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

разница next() vs yield

возник вопрос по созданию итератора __iter__ по атрибуту-списку объекта.
в документации пишут что нужно возвращать объект-итератор.
но проверил с простым циклом и yield в теле __iter__ - так тоже работает.
непонятно только как с потокобезопасностью в этом случае - когда __iter__ вызывается для одного объекта из разных мест программы - внутреннее окружение __iter__ создается каждый раз другое или используется одно и то же ?



Офлайн

#2 Апрель 20, 2009 00:36:13

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

разница next() vs yield

потокобезопасность прийдется обеспечивать самому, если уж нужно - в любом случае.
dict ругнется на модификацию во время итерации, list просто может “сбиться” и выдать неожиданный результат.
Кстати, простейший итератор для списка получается через iter(lst).
Есть еще выражения-генераторы: (i for i in lst).
Оба варианта побыстрее цикла с yield.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version