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