前回の内容ではラムダ式な簡単な扱い方について解説いたしました。今回はラムダ式を使って関数そのものを関数の引数として扱う方法について解説いたします。関数を引数に取る関数の事を高階関数とも言ったりします。
高階関数とは
高階関数とは上記でも記載しましたが、関数を引数に取る関数の事です。よく用いられる関数はmap関数等があります。もちろん自分で高階関数を作成することもできますが、内容が複雑になりますので、ここ(入門)では取り上げません。興味がある方は「python 高階関数」で調べてみるとよいでしょう。
map関数について
map関数とはシーケンス型のデータについて引数にした関数に記載された処理を施してくれる関数の事です。例えば、リストの値をすべて2倍にしたいという時、2倍にしてデータを返すという処理を記載した関数を引数に取りmap関数を呼び出せばリストの値をすべて2倍にしてくれます。
1 2 3 4 5 6 7 8 9 10 11 |
#値を2倍にする関数 def doubleNum(num1): return 2 * num1 #リストを定義 listNum = [2 , 4 , 7 , "test"] #2倍にしたリストデータを受け取り格納 doubleList = list(map(doubleNum , listNum)) print(doubleList) |
map関数はそのままリストを返すのではなく、mapオブジェクトというイテレータを返します。用語はイメージしづらいですが、関数によって処理を施したデータの集合体を返しているようなものだと思ってください。そのため、map関数によって帰ってきたデータ群を”list()”関数で再度リスト化し、それを別の変数に格納しています。
ラムダ式を利用した高階関数
それでは最後にラムダ式を利用してmap関数を使ってみます。上記の内容でラムダ式を使ってみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
listNum = [2 , 4 , 7 , "test"] ■■■■■通常の関数■■■■■ #足し算の結果を返す def doubleNum(num1): return num1 * 2 doubleList = list(map(doubleNum , listNum)) print(doubleList) ■■■■■ラムダ式の関数■■■■■ lambdalist = list(map(lambda num : num * 2 , listNum)) print(lambdalist) |
上の内容が最初に記載したものです。下の部分がラムダ式を利用した内容です。だいぶコンパクトにまとまっていますね。前回はラムダ式の内容を一度別の変数に格納しておりましたが、map関数にそのままラムダ式を引数として渡しても問題なく動きます。ただ、読みづらさも考慮すると一度変数に格納してからの方が良いかもしれませんので、その辺りはケースバイケースで実装しましょう。
今回はここまでです。
お疲れ様でした。
コメント