CHAPTER 10 · 6 lessons · 78問
高階関数とラムダ式
関数を値として渡す。「処理そのもの」を引数にできると、書けるものの幅が変わる。
第3章で関数を覚えたとき、関数は「呼ぶもの」だった。この章では見方を変える。関数は、値だ。
数や文字列と同じように、変数に入れられるし、別の関数に渡せるし、返すこともできる。関数を受け取ったり返したりする関数のことを 高階関数 と呼ぶよ。
いちばん実感しやすいのが並べかえだ。sorted(namaes) はそのまま並べてくれるけれど、「文字数の短い順に並べたい」となると、どういう基準で並べるかを教える必要がある。そこで sorted(namaes, key=len) と書く。len という関数を、値として渡している。カッコを付けていないことに注目してほしい——付けたら「呼んだ結果」を渡すことになってしまう。付けなければ関数そのものだよ。
基準がその場かぎりのものだと、いちいち def で名前をつけるのは大げさになる。そこで使うのが ラムダ式。lambda x: x["toshi"] と書けば、名前のない小さな関数がその場でできる。sorted(hitos, key=lambda h: h["toshi"]) で「年齢順に並べる」だ。
そのあと map と filter を扱う。map は全部に同じ処理をかける、filter は条件に合うものだけ残す。前の章でやった内包表記とできることはほとんど同じで、Python では内包表記のほうが好まれることが多い。それでも扱うのは、他人のコードに出てくるからだよ。両方読めるようにしておこう。
章の最後は、関数を引数として渡すという考え方そのものに向き合う。「あとで何をするかは、呼ぶ側に決めてもらう」という書き方ができると、部品としての関数の作り方が変わる。JavaScript を学んだことがある人なら、コールバックと同じ話だと気づくはずだよ。
この章のレッスン
名前のない関数
関数を渡す