Распаковка обобщенийPython

Программы на Python
Anonymous
Распаковка обобщений

Сообщение Anonymous »

Примечание. PEP 798 – появилась распаковка в Comprehensions (см., что нового в Python 3.15), поэтому, очевидно, синтаксис для распаковки в Comprehensions был сочтен приемлемым. Исходный вопрос о возможных двусмысленностях и о том, почему понимания вообще не были включены в PEP 448, остается ниже для исторической справки.

PEP 448 – разрешены дополнительные распаковочные обобщения:

Код: Выделить всё

>>> LOL = [[1, 2], ['three']]
>>> [*LOL[0], *LOL[1]]
[1, 2, 'three']
Хорошо! Прощайте, itertools.chain. Все равно ты мне никогда особо не нравился.

Код: Выделить всё

>>> [*L for L in LOL]
File "", line 1
[*L for L in LOL]
^
SyntaxError: iterable unpacking cannot be used in comprehension
О,. Почему у нас не может быть хороших вещей?
К сожалению, во всех них есть синтаксические ошибки:

Код: Выделить всё

[*l for l in lists]    # for l in lists: result.extend(l)
{*s for s in sets}     # for s in sets: result.update(s)
{**d for d in dicts}   # for d in dicts: result.update(d)
(*g for g in gens)     # for g in gens: yield from g
Распаковка в понимании кажется очевидной и Pythonic, и существует вполне естественное расширение от сокращенного «цикл for и добавление» до «цикл for и расширение».
Но поскольку они удосужились добавить это специальное сообщение об ошибке, предположительно, была причина его отключения. Так в чем же проблема с этим синтаксисом?

Вернуться в «Python»