Python入門 lambda関数の使い方、map関数の使い方(動画あり)

lambda関数(無名関数)

Pythonの関数には、無名関数と呼ばれるものがあり、これを使うと、コードを簡素化できます。Pythonでは無名関数のことをラムダ関数と呼びます。
無名関数とは、その名前の通り、名前がない関数で、関数をその場に記述する記法です。

ラムダ関数を書くには、lambdaというキーワードを使います。普通の関数を作るときと同じで、lambdaと記述して引数を設定した後、その処理を記述します。

例として、掛け算をするcalc_multi関数を採り上げます。この関数は次のように、defで定義しておき、それから実行しました。

lambda 引数: 返り値

掛け算を行う通常の関数の例

# calc_multi関数を定義
def calc_multi(a, b):
    return a * b
# それを実行
calc_multi(3, 10)

結果
30

関数を一旦変数に代入した後に実行する例

calc = calc_multi
calc(3, 10)

結果
30

「lambda」というキーワードを使って、無名関数として書くと次のように書けます。

(lambda a, b: a * b)(3, 10)

結果
30

ここで「lambda a, b:」というのが、「calc_multi(a, b)」に相当する部分です。
そして「:」で区切って、その関数の処理(ここでは`return a * b`)を記述するというのが、無名関数の基本的な書き方です。

わかりやすい記述は次のようになります。
ラムダ関数を定義してから一旦変数に代入し、その後、変数名で関数を実行しています。

calc = lambda a, b: a * b

calc(2,10)

結果
20

map関数

Pythonの、map() はリストやタプルのすべての要素に同じ演算を適用する関数です。
正確には [関数] と [イテラブルオブジェクト] を受け取って、[イテラブルオブジェクト] の各要素を関数に渡して各要素の戻り値を要素にもつイテレータを生成します。

 map(関数, イテラブル)

無名関数は、リストなどに含まれる要素に対して何か関数を実行したいときに、よく使います。

要素に対して、何か処理したいときは、map関数を使います。map関数は、高階関数と呼ばれ、関数を引数や戻り値として使う関数で、各要素に対して、何か処理や操作したいときに使います。

例えば、次のように要素の値を2倍にして返す関数calc_doubleを定義するとします。

numbers = [1,2,3,4]
def calc_double(x):
  return x * 2
map(calc_double, numbers)

結果

このような書き方だと、別にcalc_double関数を定義しておかなければなりませんが、先に説明したラムダ関数を使うと、ここに直接関数の処理を記述でき、例えば、次のように書けます。

numbers = [1,2,3,4]
map(lambda x : x * 2, numbers)

結果

for in文でも活用できます。

リスト要素を2倍して再度リスト化する例

numbers = [1,2,3,4]
num = []
for v in map(lambda x : x * 2, numbers):
  num.append(v)

num

結果
[2, 4, 6, 8]

for in文の代わりにlist()を活用した例

list(map(lambda x : x * 2, numbers))

結果
[2, 4, 6, 8]

内包表記を使うとmap関数やラムダ関数の必要はなくなります。

内包表記で同様のことを行った例

[x *2 for x in numbers]

結果
[2, 4, 6, 8]

内包表記を使うとかなりシンプルにコードが書けるようになります。

参考になった書籍

プログラミングを少しでも経験がありPython の文法を学習する場合は、「入門 Python 3」が良いと思います。長く使えます。

「退屈なことはPython にやらせよう」はオブジェクト指向の解説がないです。代わりにPythonを使った便利な実例が初心者には嬉しい内容です。正規表現から、簡単なスクレイピング 、画像操作などあります。ただし、中級者以上には少し物足りないかもしれません。

Pythonサンプルのダウンロード

ここでダウンロードする「map_lambda.ipynb」ファイルは、このPython動画で使用したものです。

map_lambda.ipynb

Python入門一覧