Прежде всего, обратите внимание, что «по шаблону» функциональных языков и присвоение кортежей, о которых вы упоминаете, на самом деле не похоже. В функциональных языках шаблоны используются для частичного определения функции.Так f (x : s) = e
не значит взять голова и хвост аргумента f
и возврат e
их использование, но это означает, что если аргумент f
имеет вида x : s
(для некоторых x
и s
), затемf (x : s)
является равным e
.
Назначение python больше похоже на множественное присвоение (я подозреваю, что это было его первоначальное намерение). Таким образом, вы пишете, например, x, y = y, x
, чтобы обменять значения в x
и y
без временной переменной (как и с простой операцией присваивания). Это имеет мало общего с сопоставлением с образцом, поскольку в основном это сокращение для «одновременного» выполнения x = y
и y = x
. Хотя python позволяет использовать произвольные последовательности вместо списков, разделенных запятыми, я бы не предлагал называть это сопоставление шаблонов. При сопоставлении с образцом вы проверяете, соответствует ли какой-либо шаблон шаблону; в назначении python вы должны убедиться, что последовательности с обеих сторон одинаковы.
Чтобы сделать то, что вам кажется, вы, как правило, (также в функциональных языках) используете либо вспомогательную функцию (как упоминалось другими), либо что-то похожее на let
или where
(что вы можете рассматривать как использование анонимных функций). Например:
(head, tail) = (x[0], x[1:]) where x = my_func()
Или, в реальном питоне:
(head, tail) = (lambda x: (x[0], x[1:]))(my_func())
Обратите внимание, что это, по существу же, как и решения, предоставляемых другими с вспомогательной функцией, за исключением того, это один лайнера вы хотели , Это, однако, не обязательно лучше, чем отдельная функция.
(Извините, если мой ответ немного сверху. Я просто думаю, что это важно сделать различие ясно.)
Конечно, вы можете положить, что лямбда на одной линии со всем остальным: голову, остальное = (lambda lst: (lst [0], lst [1:])) (my_func()) – 2008-10-26 15:54:39
Да, но это начинает действовать при запутывании. – 2008-10-27 13:01:45
+1 для новой функции Python 3 и ссылки на PEP. – fossilet 2013-08-27 03:55:50