pythonにおけるlambda関数の理解と使用


Lambda関数、すなわちLambda式(lambda expression)は、数学におけるλ演算の名前は、その中のlambda抽象(lambda abstraction)に直接対応している.
入門Pythonの友達は、関数に名前がなくてもいいですか?
もちろんいいです.一部の関数は一時的に使用され、ビジネスロジックも簡単(例えば、簡単な加算、絶対値の取得、簡単なフィルタリングなど)であれば、名前を付けなくてもいいです.大きなPythonプロジェクトの開発では、関数名が多すぎるとコードの可読性に影響します.
In[1]:  lambda x,y:x+y
Out[1]: >

xとyは関数の2つのパラメータであり、コロンの後ろの式(x+y)は関数の戻り値であり、明らかにこの関数は2つの変数の和を求めるものであり、ここではしばらくこの匿名関数に名前をバインドし、匿名関数を呼び出すことが可能になる.
>> add = lambda x,y:x+y
>> add(3,4)
>> 7

通常の関数と同等です.
>>> def add2(x, y):
...     return x+y
...
>>> add2

>>> add2(1,2)

次に、lambda関数の使用シーンを紹介します.
1関数式プログラミング
  :      ,                   
>>> my_list = [3,5,-4,-1,0,-2,-6]
>>> sorted(my_list, key=lambda x: abs(x))
[0, -1, -2, 3, -4, 5, -6]

    sorted            ,      sorted     ,                。
  ,            :
>>> def foo(x):
...     return abs(x)
...
>>> sorted(list1, key=foo)
[0, -1, -2, 3, -4, 5, -6]
                Pythonic   。

lambda:  Python         ,               ,             :
>>> add = lambda x,y : x+y
>>> add(5,6)
>>> (lambda x,y:x+y)(5,6)

2 filter、map、reduce
Pythonで最も一般的なfilterフィルタリング、mapブラシ、reduceマージは、lambda式で生成できます.
シーケンスには、filter()、map()、reduce()の3つの関数プログラミングツールがあります.
# map(function,sequence): sequence          function,             list。  function     , map(function,sequence1,sequence2)。
#  1~20   
>>> list(map(lambda x:x*x,range(1,21))) 
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 169, 196, 225, 256, 289, 324, 361, 400]

# filter(function,sequence): sequence  item    function(item),      True item    List/String/Tuple(   sequence   )  。
 
#  1~20     
>>> list(filter(lambda x:x%2 == 0,range(1,21)))
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

reduce(function,sequence):function          2,  sequence               function,  function              function,         。
 
# 1~100  
>>> from functools import reduce          #Python3.x      reduce  
>>> reduce(lambda x,y:x+y,range(1,101))

# 1~100  ,   10000
>>> reduce(lambda x,y:x+y,range(1,101),10000)

3閉パッケージ
≪閉パッケージ|Closed Package|emdw≫:関数の内部に定義された関数で、変数が関数の役割ドメイン範囲から離れてもアクセスできるようにします.閉包としてlambda関数を用いた例を見てみましょう.
>>> def add(n):
...     return lambda x:x+n
...
>>> add2 = add(5)
>>> add2(15)