Почему оболочка python позволяет только `print` выводить в распакованном виде - python - PullRequest
0 голосов
/ 16 сентября 2018

В основном мой заголовок - это вопрос:

Пример:

>>> l=[1,2,3]
>>> *l
SyntaxError: can't use starred expression here
>>> print(*l)
1 2 3
>>> 

Почему это ???

Ответы [ 2 ]

0 голосов
/ 16 сентября 2018

Я думаю, что на самом деле это вопрос понимания *l или вообще *ListLikeObject.

Критическая точка *ListLikeObject не является допустимым выражением в отдельности.Это не означает «О, пожалуйста, распакуйте список».

Примером может быть 2 *[1, 2, 3] (Как мы все знаем, он выдаст [1, 2, 3, 1, 2, 3]).Если индивид *[1, 2, 3] действителен, что он должен выводить?Должно ли оно вызывать исключение времени выполнения, поскольку вычисляемое выражение равно 2 1 2 3 и оно недопустимо (как-то похоже на деление на 0)?

Таким образом, по сути, *[1, 2, 3] - это просто синтаксический сахар, который помогает передавать аргументы.Вам не нужно вручную распаковывать список, но переводчик сделает это за вас.Но по существу он все еще передает три аргумента вместо одного кортежа чего-то другого.

0 голосов
/ 16 сентября 2018

, потому что это эквивалентно позиционированию арагов, отвечающих списку, поэтому, когда вы не вызываете его где-то, что может принять все аргументы, это не имеет смысла, так как аргументы некуда поставить

f.x.

print(*[1,2,3])
# is the same as
print(1,2,3)

и

*[1,2,3]
#is the same as - and do not think of it as a tuple
1,2,3 # here how ever that makes it a tuple since tuples not defined by the parenthasies, but the point is the same

однако есть небольшое исключение из этого, которое есть в кортежах, списках, множествах и словарях начиная с python 3.5, но это исключение, и оно также может быть использовано для присваивания оставшихся значений, как бы Python не мог видеть ваши действия из них.

EDIT Я восстановил ответ, поскольку понял, что только последняя часть была неправильной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...