次のコードがあります。
g = lambda a, b, c: sum(a, b, c)
print g([4,6,7])
リストを3つの値に展開するラムダ関数を取得するにはどうすればよいですか?
リスト t0 3 値を展開すると、次のようになります。
g(*[4,6,7])
しかし、sum
あなたのやり方ではうまくいきません。または、次のように書くこともできます。
>>> g = lambda *arg: sum(arg)
>>> print g(4, 5, 6)
15
>>>
または、ラムダがリストを受け入れるようにするだけです。
g = lambda alist: sum(alist)
print g([4,6,7])
g = lambda L: sum(L)
print g([4,6,7])
任意のサイズのリストで機能します。
を使用する場合g = lambda a, b, c: someFunc(a, b, c)
は、電話してくださいprint g(4,6,7)
lambda
リストを取るように変更できないのはなぜですか。sum()
3 つの引数を取らないため:
>>> g = lambda a_list: sum(a_list)
>>> print g([4,6,7])
17
または非キーワード引数:
>>> g = lambda *nkwargs: sum(nkwargs)
>>> print g(4,6,7)
17
3 つのパラメーターを受け取る関数を定義し、それに単一のパラメーター (リスト) を指定します。お望みならば
print g([4,6,7])
機能するには、あなたの定義は
g = lambda lst: sum(lst)
探しているコードは次のとおりです。
>>> g = lambda a, b, c: sum([a, b, c])
>>> print g(*[4,6,7])
17
あなたがやろうとしていたことはうまくいきません:
>>> g = lambda a, b, c: sum(a, b, c)
>>> print g(*[4,6,7])
Traceback (most recent call last):
File "<pyshell#83>", line 1, in <module>
print g(*[4,6,7])
File "<pyshell#82>", line 1, in <lambda>
g = lambda a, b, c: sum(a, b, c)
TypeError: sum expected at most 2 arguments, got 3
あなたsum()
が与えた引数を処理できないからです。
ラムダ関数は単なる関数なので、直接sum()
呼び出してみませんか?sum()
あなたのコードが次のa, b, c
値の場合:
>>> a, b, c = range(1,4)
>>> print a,b,c
1 2 3
そして、あなたはやりたかった:
>>> g = lambda a, b, c: sum([a, b, c])
>>> print g(*[a,b,c])
6
なぜ次のことをしないのですか?:
>>> sum([a,b,c])
6
ラムダに固定長のリスト/タプルが渡されることを期待しているが、そのリスト/タプルの値を個別のパラメーター変数に展開したい場合は、次のように機能します。
g = lambda (a, b, c): a + b + c
g([4, 6, 7])
パラメーター リストを囲む括弧に注意してください。
この「機能」は Python 2.x で動作しますが、Python 3 で削除されました
>>> g=lambda *l: sum(l)
>>> print g(1,2,3)
6