13 апреля 2013 г.

Краткая сводка по синтаксису генераторов в Python 3.0

В данном посте, мы попытаемся показать все разновидности генераторов



  • В случае с множествами {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}

Комментариев нет:

Отправить комментарий