Методи генератор-ітератор

Оновлено: 24.04.2023

У цьому підрозділі описано методи ітератора генератора. Вони можуть використовуватися для керування виконанням функції генератора.

Зауважте, що виклик будь-якого з наведених нижче методів генератора, коли генератор уже виконується, викликає виняткову ситуацію ValueError.

generator.__next__() Починає виконання функції генератора або відновлює його після останнього виконаного виразу yield. Коли функцію генератора відновлено за допомогою методу __next__(), поточний вираз yield завжди оцінюється як None. Потім виконання продовжується до наступного виразу yield, де генератор знову призупиняється, а значення expression_list повертається до викликаючого __next__(). Якщо генератор завершує роботу, не видаючи іншого значення, виникає виняток StopIteration. Цей метод зазвичай викликається неявно, напр. за допомогою циклу for або за допомогою вбудованої функції next().

generator.send(value) Відновлює виконання та «надсилає» значення у функцію генератора. Аргумент value стає результатом поточного виразу yield. Метод send() повертає наступне значення, отримане генератором, або викликає StopIteration, якщо генератор завершує роботу, не видаючи іншого значення. Коли send() викликається для запуску генератора, його потрібно викликати з None як аргументом, оскільки немає виразу yield, який міг би отримати значення.

generator.throw(value) generator.throw(type[, value[, traceback]]) Викликає виняток у точці, де генератор було призупинено, і повертає наступне значення, отримане функцією генератора. Якщо генератор завершує роботу, не видаючи іншого значення, виникає виняток StopIteration. Якщо функція генератора не перехоплює переданий виняток або викликає інший виняток, тоді цей виняток поширюється на виклик. У типовому використанні це викликається з одним винятком, подібним до того, як використовується ключове слово raise. For backwards compatibility, however, the second signature is supported, following a convention from older versions of Python. The type argument should be an exception class, and value should be an exception instance. If the value is not provided, the type constructor is called to get an instance. If traceback is provided, it is set on the exception, otherwise any existing __traceback__ attribute stored in value may be cleared.

generator.close() Викликає GeneratorExit у точці, де функцію генератора було призупинено. Якщо функція-генератор завершує роботу належним чином, уже закрита або викликає GeneratorExit (не перехоплюючи виняток), close повертається до свого виклику. Якщо генератор видає значення, виникає RuntimeError. Якщо генератор викликає будь-який інший виняток, він передається до абонента. close() нічого не робить, якщо генератор уже завершив роботу через виняток або нормальний вихід.