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