本連載では、コードを書く流れに沿ってPython言語の基礎文法を説明してきた。今回は、応用的だが、利用頻度が高く重要な文法として、ラムダ式を紹介する。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
ご注意:本記事は、@IT/Deep Insider編集部(デジタルアドバンテージ社)が「deepinsider.jp」というサイトから、内容を改変することなく、そのまま「@IT」へと転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
Python言語の文法のうち、応用的だが押さえておいてほしいものをいくつか、具体的には、
の5項目を紹介してから終わりとしたい。これらは、Pythonのサンプルコードを読む際に出くわす可能性が特に高く、しかも知らないと非常に難解そうなコードに思えてしまうものである。そのうち今回は、「ラムダ式」について説明する。※脚注や図、コードリストの番号は前回からの続き番号としている。
なお、本稿で示すサンプルコードの実行環境については、Lesson 1を一読してほしい。
Lesson 1でも示したように、本連載のすべてのサンプルコードは、下記のリンク先で実行もしくは参照できる。
ラムダ式(lambda expression)とは、関数をその場で短く書く方法である。例で示そう。
例えば、arg_xとarg_yという2つの引数を取り、それを足し算するadd_func関数を定義するとしよう。これをdef文で記述すると次のようになる。リスト20-1では、add_func関数を呼び出して、結果を表示するところまでを記述した。
def add_func(arg_x, arg_y):
return arg_x + arg_y
sum = add_func(101, 234)
sum # 335
これをラムダ式で書くと、リスト20-2のようになる。
add_lambda = lambda arg_x, arg_y: arg_x + arg_y
sum = add_lambda(101, 234)
sum # 335
ラムダ式は図19のような構文になっている。関数の中身には式を1つだけ書ける。このため、ラムダ式で定義できるのはシンプルな処理を行う関数だけとなる。
文(形式の関数)が式(形式のラムダ式)になっているわけであるが、この例だけだと「なぜラムダ式が良いのか」は分からないだろう。ラムダ式が役立つのは、
ある関数some_actionが、その関数内部の処理を実行中に、別の関数callbackを呼び出す、
ような場合だ。
呼び出される別の関数callbackはコールバック関数と呼ばれる。その実体は、ある関数some_actionの引数に指定された「関数オブジェクト」(=def文で定義した関数の名前もしくはlambda式)である。例えば、ソート(=順番の並べ替え)で独自の並べ替え方法(=ソート方法)を実装する場合には、その独自アルゴリズムを「通常の関数」として記述して、その名前を、対象の関数の引数に指定する。もしくは、対象の関数の引数に対して「ラムダ式」で独自アルゴリズムを直接記述することになる。
コールバック関数として、もちろん通常の関数を指定しても問題ない。ただしソートの場合は、比較的シンプルなアルゴリズムのコードになることが多いので、ラムダ式で指定した方が、コードを見たときのソートの意味が分かりやすい、というメリットが出てくる。
……といった言葉の説明では「分からない」と感じた人も多いと思うので、具体的なコードを見てみよう。ここでは、別連載『機械学習&ディープラーニング入門(データ構造編)』の「[Lesson 1] 機械学習を始めるための、Pythonデータ構造「多次元リスト」入門 - Deep Insider」のリスト2-2で示した身長の1次元リスト値を、10で割ったときの余りの大きさ順でソートする独自アルゴリズムを構築するとしよう。
リスト20-3は、Python言語に標準で用意されている(=つまり組み込み関数の)sorted()関数を呼び出してソートしているところだ。引数keyに指定しているのがコールバック関数で、ここに独自のソートアルゴリズムを「ラムダ式」で指定している。なお、引数reverseは、昇順(=小さい順)ではなく、降順(=大きい順)にするためのオプションである。
heights = [ 165.5, 177.2, 183.2 ]
sorted_heights = sorted(heights, key=lambda x: x % 10, reverse=True)
sorted_heights # [177.2, 165.5, 183.2]
Copyright© Digital Advantage Corp. All Rights Reserved.