Генератор виразів
Оновлено: 28.04.2023
Генеруючий вираз — це компактний генераторний запис у круглих дужках:
generator_expression ::= "(" expression comp_for ")"
Генеруючий вираз дає новий генераторний об’єкт. Його синтаксис такий самий, як і для розуміння, за винятком того, що він узятий у дужки замість дужок або фігурних дужок.
Змінні, які використовуються у виразі генератора, обчислюються ліниво, коли метод __next__() викликається для об’єкта генератора (так само, як і звичайні генератори). Однак ітераційний вираз у крайньому лівому реченні for негайно обчислюється, тому помилка, створена ним, буде видана в точці, де визначено вираз генератора, а не в точці, де перше значення відновлено. Наступні пропозиції for і будь-яка умова фільтра в крайньому лівому пункті for не можуть бути оцінені в охоплюючій області, оскільки вони можуть залежати від значень, отриманих від крайнього лівого ітератора. Наприклад: (x*y для x в діапазоні (10) для y в діапазоні (x, x+10)).
У викликах лише з одним аргументом дужки можна опускати. Подробиці див. у розділі Дзвінки.
Щоб уникнути перешкоджання очікуваній роботі самого виразу генератора, вирази yield і yield from заборонені в неявно визначеному генераторі.
Якщо вираз генератора містить пропозиції async for або вирази await, це називається asynchronous generator expression. Вираз асинхронного генератора повертає новий об’єкт асинхронного генератора, який є асинхронним ітератором (див. Асинхронні ітератори).