Python のラムダ関数

ラムダ関数とは?

​,war
Python では、関数はオブジェクトです。変数に割り当てたり、他の関数から返したり、リストや辞書に格納したり、他の関数のパラメーターとして渡したりできます。 たとえば、 map() 組み込み関数。 その構文は map(function, iterable) そして、それは手軽に適用するために使用されます function のあらゆる要素に iterable.

map() 実際に iterator 物体。 実際には、結果を list, tuple, set, dictなど、都合の良い方で。
​,war
を使用して、リストのすべての項を二乗したいとします。 map() 関数。 そのためには、 square() 関数のパラメーターとして使用します map():

my_list = [1,2,3,4,5]
def square(x):
    return x**2

my_modified_list = list(map(square, my_list))
print(my_modified_list)
[1, 4, 9, 16, 25]

​,war
ただし、当社の使用のみの場合 square() 関数はこのリストを作成することです。 lambda 関数:

my_list = [1,2,3,4,5]
my_modified_list = list(map(lambda x: x**2, my_list))
print(my_modified_list)
[1, 4, 9, 16, 25]

Pythonでは、 lambda 関数は、アロンゾ・チャーチの名前と構文から取った無名関数です。 ラムダ計算. それらの構文は次のとおりです。

lambda x_1,..., x_n : expression(x_1, ..., x_n)

これにより、変数を入力として受け取る無名関数が作成されます x_1, ..., x_n 評価された expression(x_1, ..., x_n).
​,war
の目的 lambda functions は、関数をパラメーターとして受け入れる関数のパラメーターとして使用されます。 map() その上。 Python では、 lambda 関数は変数に渡されますが、 PEP 8 スタイルガイド それに対して助言します。 単純な関数を変数に代入する場合は、XNUMX 行の定義として行う方が適切です。 これにより、結果のオブジェクトに適切な名前が付けられ、トレースバックの読みやすさが向上します。

anonymous_square = lambda x : x**2def named_square(x): return x**2print(anonymous_square.__name__)
print(named_square.__name__)


a = anonymous_square
b = named_square
print(a.__name__)
print(b.__name__)

Lambda 関数を使用する理由

最後の段落の後、なぜ使用したいのか疑問に思うかもしれません lambda 関数。 結局のところ、でできることは何でも lambda 関数は、名前付き関数で実行できます。
​,war
これに対する答えはそれです lambda 機能 目的 計算を表すより大きな式の中に住むことです。 これについて考える XNUMX つの方法は、変数と値の類推です。 次のコードを検討してください。

x = 2

変数 x 整数のプレースホルダー (または名前) です。 2. たとえば、 print(x) および print(2) まったく同じ出力が得られます。 関数の場合:

def square(x): return x**2

関数 square() 数値の XNUMX 乗を計算するためのプレースホルダーです。 この計算は、名前のない方法で次のように記述できます。 lambda x: x**2.
​,war
この哲学的な余談に続いて、アプリケーションのいくつかの例を見てみましょう lambda 機能します。
​,war

sorted() 関数で Lambda を使用する

  sorted() 関数は iterable をソートします。 関数をその key 引数であり、 iterable の各要素に適用された関数の結果が要素の順序付けに使用されます。
​,war
これは、 lambda 機能: を設定することにより key パラメータを使用して lambda 関数を使用すると、要素の任意の種類の属性で並べ替えることができます。 たとえば、名前のリストを姓でソートできます。

name_list = ['Grace Hopper', 'Ada Lovelace', 'Emmy Noether', 'Marie Curie']
​
sorted_by_surname = sorted(name_list, key = lambda x: x.split()[1])
​
print(sorted_by_surname)
['Marie Curie', 'Grace Hopper', 'Ada Lovelace', 'Emmy Noether']

「filter()」関数で Lambda を使用する

  filter() 関数の構文は次のとおりです。 filter(function, iterable) そしてそれはの要素を出力します iterable 評価する function(element) 真として(それはに似ています WHERE 句)。 使用できます lambda 関数はパラメータとして filter() イテラブルから要素を選択します。

次の例を考えてみます。

num_list = list(range(0,100))
​
multiples_of_15= filter(lambda x: (x % 3 == 0) and (x % 5 == 0), num_list)
​
print(list(multiples_of_15))
[0, 15, 30, 45, 60, 75, 90]

filter() を適用します lambda function lambda x: (x % 3 == 0) and (x % 5 == 0) の各要素に range(0,100)、を返します filter 物体。 次のようにキャストして要素にアクセスします。 list.
​,war

map() 関数で Lambda を使用する

​,war
最後の例は、イントロダクションで見たものです。 map() 関数。 ザ map() 関数の構文は次のとおりです。 map(function, iterable), map() 適用 function の各要素に iterableを返します map にキャストすることでアクセスできるオブジェクト list.

これをリストに適用する方法を見てきましたが、 dict.items() 方法:

my_data = {'Mary':1, 'Alice':2, 'Bob':0}
map_obj = map(lambda x: f'{x[0]} had {x[1]} little lamb', my_data.items())
print(', '.join((map_obj)))
Mary had 1 little lamb, Alice had 2 little lamb, Bob had 0 little lamb

または文字列に:

my_string = 'abcdefg'
''.join(map(lambda x: chr(ord(x)+2),my_string))
'cdefghi'

ベストプラクティス、業界で認められた標準、および含まれているチートシートを含む、Gitを学習するための実践的で実用的なガイドを確認してください。 グーグルGitコマンドを停止し、実際に 学ぶ それ!

我々は使用することができます map() 独創的な方法で機能します。XNUMX つの例は、同じ入力に多くの機能を適用することです。

たとえば、テキスト文字列を受け取る API を作成していて、それに関数のリストを適用したいとします。

各関数は、テキストからいくつかの機能を抽出します。 抽出したい特徴は、単語数、XNUMX 番目の単語、および XNUMX 番目の単語の XNUMX 番目の文字です。

def number_of_words(text):
  return len(text.split())
​
def second_word(text):
  return text.split()[1]
​
def fourth_letter_of_fourth_word(text):
  return text.split()[3][3]
​
function_list = [number_of_words, second_word, fourth_letter_of_fourth_word]
​
my_text = 'Mary had a little lamb'
map_obj = map(lambda f: f(my_text), function_list)
​
feature_list = list(map_obj)
​
print(feature_list)
[5, 'had', 't']

​,war

まとめ

​,war
このガイドでは、 lambda Python の関数。 私たちはそれを見てきました lambda functions は、他の関数のインライン関数パラメーターとして使用される無名関数です。 いくつかのユースケースと、それらを使用しない場合を見てきました。
​,war
プログラミングをするときは、Donald Knuth の言葉を心に留めておくことが重要です。 これを考慮して、 lambda 関数はコードを単純化するための便利なツールですが、賢明に使用する必要があります。

タイムスタンプ:

より多くの スタックアバス