Почему Python позволяет распаковывать пустую итерацию?Python

Программы на Python
Ответить
Anonymous
 Почему Python позволяет распаковывать пустую итерацию?

Сообщение Anonymous »

Я писал код и допустил опечатку, но ошибки не было. Прослеживая это, я обнаружил, что это работает:

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

>>> [] = []
>>> () = ()
>>>
Это итеративная распаковка, но без реальной цели для назначения. Почему Python позволяет это? Есть ли ситуации, когда это полезно?
Вот где это определено в грамматике. Я думал, что вам понадобится хотя бы один идентификатор, атрибут, подписка или нарезка, но, видимо, нет; target_list является необязательным внутри круглых или квадратных скобок.

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

target ::=  identifier
| "(" [target_list] ")"
| "[" [target_list] "]"
| attributeref
| subscription
| slicing
| "*" target
Глядя на историю документации, это было невозможно еще в Python 3.4 и 2.6, но присвоение [] было добавлено в Python 3.5 и 2.7, а () в Python 3.6.
Связано:
  • Почему допустимо присваивание пустому списку, а не пустому кортежу? (В конечном итоге ответ был ошибкой)
  • Почему присвоение пустому списку (например, [] = "") не является ошибкой? (В ответах больше говорится о как, чем о почему)
Примечание. Поскольку я спрашиваю о выборе дизайна, ответы должны включать ссылки на авторитетные источники, такие как официальная документация или основные разработчики.

Подробнее здесь: https://stackoverflow.com/questions/673 ... y-iterable
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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