Python 3で高階関数やラムダ式の練習


このエントリーをはてなブックマークに追加

高階関数

Pythonでは、関数の引数として関数をとることができます。関数を引数としてとったり、関数を戻り値として戻したりできる関数のことを高階関数と呼びます。

filter()

高階関数の代表はfilter()です。filter()を使うと、シーケンスのうち条件にあう要素だけを取り出すことができます。

以下は、シーケンスから3の倍数である要素のみ取り出す例です。

def is_multiple_of_3(n):
    return n % 3 == 0

nums = range(30)
filtered_nums = filter(is_multiple_of_3, nums)

print(list(filtered_nums))

出力結果は以下です。3の倍数のみ抽出できています。

[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

ラムダ式

上で定義したis_multiple_of_3()を一般化して、「数字nの倍数に対してのみTrueを返す関数」を返す高階関数を作ります。それにはラムダ式を使います。

# 「入力の数字がnの倍数のときのみTrueを返す関数」を返す関数
def is_multiple_of_n(n):
    return lambda x: x % n == 0

この高階関数を使うと、好きな倍数の要素のみ取り出すことが簡単にできます。

nums = range(30)

# 7の倍数のみ抽出
filtered_nums = filter(is_multiple_of_n(7), nums)
print(list(filtered_nums))

# 5の倍数のみ抽出
filtered_nums = filter(is_multiple_of_n(5), nums)
print(list(filtered_nums))

出力結果は以下です。うまくいっています。

[0, 7, 14, 21, 28]
[0, 5, 10, 15, 20, 25]

参考

パーフェクトPython (PERFECT SERIES 5)