2013-05-21 8 views
19

私はラムダに戻り式がないことを知っています。通常python - 複数の返り値を返すことができます

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

を書くことができます。

lambda a : a + 1 

どのようにラムダ関数での書き込みについては、この1:

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

これは複数の値を持つ単一のリターンではありません。これは1つの値(1つのタプルになる)を持つ1つのリターンです。 – delnan

+1

+1 @ delnanのコメントです。これは、Pythonの '、'の宣伝を嫌っている主な理由です。実際に何が起こっているのかわかりません。 – Izkata

+5

@Izkata何ですか? '、'は "タプルに昇格されません"という文字通り、タプルの作成の構文です。そしてそれは完全にはっきりとしたIMHOです。 – delnan

答えて

27

はい、可能です。関数の最後にこのような表現なので:

return a, b 

がこれに相当します持っていることを起こるタプル:

return (a, b) 

そしてそこに、あなたは本当に、単一の値を返すしています2つの要素。ラムダが単一の値であるため、ラムダがタプルを返すようにしても問題ありません:

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

つまり、優先順位の問題です。 '、'は 'lambda'より優先度が低くなります – newacct

14

確か:

lambda a, b: (a + 1, b * 1) 
9

ものについて:

lambda a,b: (a+1,b*1)