Дан генератор: def gen(): print("A"); yield 1; print("B"); yield 2. Сразу после g = gen() что будет выведено в консоль?
AВыведется только
ABВыведутся и
A, и BCНичего не будет выведено
DБудет исключение
TypeErrorПравильный ответ. Вызов функции-генератора возвращает объект-генератор, но тело функции не выполняется до первой итерации.
Разбор
После g = gen() Python создаёт объект-генератор, но код внутри функции ещё не запущен — print("A") не сработает. Тело начнёт исполняться только при первой итерации: next(g) или for x in g дойдёт до первого yield 1, и тогда увидим A. Следующий next(g) напечатает B и вернёт 2. TypeError не возникает: вызов gen() без аргументов корректен, ведь функция не принимает параметров.
Проверь себя · 1/3разбор после ответа
Что произойдёт при выполнении
it = iter([]) и затем next(it)?Ещё вопросы по теме «Итераторы и генераторы»
- Есть `xs = [1, 2, 3]` и `it = iter(xs)`. Сначала выполняется `a = list(it)`, а затем `b = list(it)`. Чему равно `b`?
- Есть `it = iter(['a', 'b'])`. Что вернёт самый первый вызов `next(it)` сразу после создания итератора?
- Что создаёт выражение `squares = (x * x for x in xs)`?
- В отладке вы сделали `pairs = zip(users, spends)`, затем `debug = list(pairs)`. После этого `d = dict(pairs)` оказался пустым словарём. Почему?
- Что произойдёт при выполнении `it = iter([])` и затем `next(it)`?
- Все вопросы по «Итераторы и генераторы» →