2013-05-21 3 views
19

Я знаю, что лямбда не имеет выражения возврата. Обычноpython - can lambda имеют более одного возврата

def one_return(a): 
    #logic is here 
    c = a + 1 
    return c 

можно записать:

lambda a : a + 1 

Как насчет записи этого один в лямбда-функции:

def two_returns(a, b): 
    # logic is here 
    c = a + 1 
    d = b * 1 
    return c, d 
+9

Это не более чем один возврат, это даже не один возвращение с несколькими значениями. Это одно возвращение с одним значением (которое является кортежем). – delnan

+1

+1 комментарий @ delnan, это основная причина, по которой мне не нравится продвижение Python ',' для кортежа повсюду. Это запутывает то, что на самом деле происходит. – Izkata

+5

@Izkata Что? ',' не "продвигается до кортежа", это буквально синтаксис для создания кортежа. И это совершенно ясно ИМХО. – delnan

ответ

27

Да, это возможно. Поскольку такое выражение, как это в конце функции:

return a, b 

равносильна этому:

return (a, b) 

И там, вы действительно возвращает одно значение: кортеж, который случается иметь два элемента. Так что это нормально, чтобы иметь лямбда вернуть кортеж, потому что это единственное значение:

lambda a, b: (a, b) # here the return is implicit 
+3

Другими словами, это вопрос приоритета. ',' имеет более низкий приоритет, чем 'lambda' – newacct

Смежные вопросы