В данном посте, мы попытаемся показать все разновидности генераторов
- В случае с множествами {1, 3, 2} эквивалентна вызову set([1, 3, 2]), а новый синтаксис генераторов множеств {f(x) for x in S if P(x)}, напоминает синтаксис выражений-генераторов set(f(x) for x in S if P(x)), где f(x) – произвольное выражение.
- В случае со словарями новая конструкция генераторов словарей {key: val for (key, val) in zip(keys, vals)} действует точно так же, как dict(zip(keys, vals)), and {x: f(x) for x in items}, и напоминает выражение-генератор dict((x, f(x)) for x in items).
Ниже показана краткая сводка по всем альтернативным генераторам в версии Python 3.0. Последние две конструкции являются новыми и недоступны в версии Python 2.6:
>>> [x * x for x in range(10)] # Генератор списков:
# конструирует список
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] # подобно вызову
# list(generator expr)
>>> (x * x for x in range(10)) # Выражение-генератор:
# воспроизводит
<generator object at 0x009E7328> # элементы. Скобки часто
# необязательны
>>> {x * x for x in range(10)} # Генератор множеств,
# новинка в Python 3.0
{0, 1, 4, 81, 64, 9, 16, 49, 25, 36} # {x, y} – литерал множества
# в Python 3.0
>>> {x: x * x for x in range(10)} # Генератор словарей,
# новинка в Python 3.0
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
Комментариев нет:
Отправить комментарий