Разъяснения по распаковке Python кортежей - PullRequest
1 голос
/ 25 мая 2020

Понятно, что распаковка кортежа может происходить только между кортежами / списком, поэтому

x,*y = (1,2,3,4)

действительно. Однако, если мы попытаемся выполнить распаковку для одной переменной

*x = (1,2,3,4,5)

, мы получим ошибку, поскольку x не является списком / кортежем, поэтому распаковка не может произойти. Если это так, то как мы можем использовать * args, чтобы иметь несколько параметров в функции

def max(* args):
  for x in args:
    print(x)

Итак, если я вызываю max (1,2,3,4). Разве мы не должны получить ошибку, потому что * args не является кортежем, поэтому мы не можем выполнить распаковку?

1 Ответ

3 голосов
/ 25 мая 2020

Загвоздка в том, что скобки в списке параметров всегда заключают кортеж. Это скобки, которые нельзя пропустить . Таким образом, они не смешиваются со скобками приоритета оператора

Кстати, забавный факт: напишите (ЗАПОМНИТЕ ЗАПЯТУЮ ПОСЛЕ x)

*x, = (1,2,3,4,5)

Тогда он работает, как и вы не нужно было бы добавить запятую в скобки, чтобы получился кортеж. как (1) не является кортежем, а (1,) - это

...