関数とスコープ

ラムダ式(無名関数)の使い方

今回はラムダ式について学びます。ラムダ式は「無名関数」とも呼ばれ、その場でサッと使いたい関数を作るときに便利です。

ラムダ式の構文

ラムダ式の書き方はとてもシンプルです。基本の形は次の通りです:


  lambda 引数: 式

たとえば、数字を2倍にするラムダ式はこうなります:


  lambda x: x * 2

このラムダ式は「xを受け取ってx*2を返す」という意味です。

ラムダ式は、変数に代入して使うこともできます。


  double = lambda x: x * 2
  print(double(5)) # 出力: 10

この例では、doubleという変数にラムダ式を入れて、普通の関数のように使っています。

関数とスコープ

ラムダ式(無名関数)の使い方

ラムダ式の使いどころ

ラムダ式は、短い関数を一時的に使いたいときにとても便利です。

たとえば、リストの中身を全部2倍にしたいときは、mapと組み合わせて使います。

で、map関数というのは何か?なんですが、指定した関数をリストなどの各要素に適用し、一括で同じ処理を実施したいときに使います。

たとえば、リストの各要素を2倍にするには、次のように使います。


  map(関数, イテラブル) # イテラブルはリストやタプルなどの繰り返し何かの処理を実施することが可能なオブジェクトの事

わかりずらいですね。。。実際のコードを見てみましょう。


  numbers = [1, 2, 3, 4] # 数字のリスト、今このリストの数をすべて2倍にしたい
  def double(x):
    return x * 2

  doubled = map(double, numbers) # double関数に、引数numsを与えます。numsはリスト形式です。
  print(list(doubled))  # 結果: [2, 4, 6, 8] #mapを使うことで、リストを1つずつ処理せず纏めて処理させることが可能です。

で、もっと手っ取り早くサクッとリストの各要素を2倍にする処理を書けるのがラムダ式です。

map関数を使うと、リストの各要素に対してラムダ式を適用できます。


  numbers = [1, 2, 3, 4]
  doubled = list(map(lambda x: x * 2, numbers)) # def doubleを定義する必要がない
  print(doubled) # 出力: [2, 4, 6, 8]

関数とスコープ

ラムダ式(無名関数)の使い方

mapと同じように利用されるのがfilter関数です。こちらの関数についても見ていきましょう。

filter関数はリストなどの各要素に対して「条件」を判定し、条件を満たす要素だけを取り出す関数です。


  filter(関数, イテラブル) # イテラブルはリストやタプルなどの繰り返し何かの処理を実施することが可能なオブジェクトの事

例えば、「偶数だけを取り出したい」といった文字通りフィルタをする場合に便利です。

filterの第1引数には「判定用の関数(True/Falseを返す)」、第2引数には「対象となるリストなど」を指定します。

この辺はmap関数と同じ使い方をします。

判定用の関数には、ラムダ式を使うと簡単に書けます。

filterの結果はイテレータなので、list()でリストに変換して使うことが多いです。

また、filterと組み合わせて、条件に合うものだけ取り出すこともできます。


  numbers = [1, 2, 3, 4, 5]
  even = list(filter(lambda x: x % 2 == 0, numbers))
  print(even) # 出力: [2, 4]

ラムダ式は、その場でサッと使いたい関数を作るときにとても役立ちます。長い処理や複雑な処理には普通の関数を使いましょう。

ラムダ式を使いこなすと、プログラムがもっと短く、分かりやすくなります