【Python】lambda(ラムダ)式の使い方を徹底解説!def(関数)とのコードを比較!
lambda(ラムダ)式とは名前をつけない状態で関数として使用できる為、無名関数と呼ばれています。
一度きりの使用なので、消費税の計算などの単純な処理やmap()関数やfilter()関数といった関数の引数に関数を指定したいときに使用することができます。
今回はlambdaの以下の内容について解説します。
・lambda(ラムダ)式とは
・lambdaでfor文を実装
・lalmbdaでif文を実装
・lambdaでif文とfor文を組みわせて実装
・lambdaとdefをコードで比較する
目次
lambda(ラムダ)式とは
lambda関数は無名関数と呼ばれ、無名の小さな関数を定義します。
無名の関数を定義して使用することで、プログラムの色んな所で制限なく利用できます。
しかし、無名の関数は任意の数の引数を取ることができますが、1つの式しか持つことができません。
lambda式の書き方
datetimeの構文は下記となります。
1 |
変数名 = lambda 引数1, ... : 返り値 |
lambdaの後に引数を設定し、「:」の後に返り値を設定します。
lambda式を使ったサンプルコード
例
1 2 3 4 5 |
x = lambda a : a + 1 print(x(5)) y = lambda a : a print(y("おはようございます。")) |
出力結果
6
おはようございます。
lambda式の基本的な使い方
lambda式の基本的な使い方をサンプルコードを使って紹介します。
引数と返り値を設定して呼び出す
これが無名関数の基本的な呼び出し方となります。
lambdaの後に引数を設定し、「:」の後に返り値を設定することで無名関数を呼び出すことができます。
例
1 2 3 4 5 |
x = lambda a, b, c : a + b + c print(x(13, 40, 45)) y = lambda a, b : a + b print(y("おはよう", "ございます。")) |
出力結果
98
おはようございます。
lambda式の実践的な使い方
lambda式の実践的な使い方を紹介していきます。
lambda式でfor文を実装する
lambda式でfor文を実装してみます。
lambda式は一行で処理を書く必要があるためfor文をそのまま書くことは出来ません。
しかし、map()関数を使用することで、for文のような処理を実装することができます。
例
1 2 3 4 5 6 7 8 9 |
name= ["田中","鈴木","中村","秋元"] nameList = list(map(lambda i : i , name)) print(nameList) num = list(map(lambda x, :x*2,range(20))) print(num) |
出力結果
[‘田中’, ‘鈴木’, ‘中村’, ‘秋元’]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38]
if文を実装する
lambda式でif文を実装するには、if文の三項演算子を使用します。
三項演算子とはプログラミングで登場する演算子のひとつであり、「if else」を一文で書きたいときに使う演算子です。
つまり、三項演算子とlambda式を組み合わせることで、1行でif文を書くことが出来ます。
例
1 2 3 4 5 6 7 |
gender = (lambda i:"男性です" if i == "man" else "女性です。") print(gender("man")) num = (lambda i:"100以上です" if i >= 100 else "100未満です。") print(num(10)) |
出力結果
男性です
100未満です。
三項演算子とlambda式を組み合わせることで、一行でif文を書くことが出来ました。
for文とif文を組み合わせて実装する
for文とif文を組み合わせて実装してみます。
リストの中にはいくつかの数字があり、100以上であれば「”数字は”100以上です。」、それ以外の場合”「数字は”100未満です。」と表示するようなコードを作成します。
例
1 2 3 4 5 6 7 8 9 |
list1 = [0,120,2,99,450,44,88,1000,667,22] list2 = (lambda i:str(i) + "は100以上です。" if i >= 100 else str(i) + "は100未満です。") list3 = list(map(list2,list1)) print(list3) |
出力結果
[‘0は100未満です。’, ‘120は100以上です。’, ‘2は100未満です。’, ’99は100未満です。’, ‘450は100以上です。’, ’44は100未満です。’, ’88は100未満です。’, ‘1000は100以上です。’, ‘667は100以上です。’, ’22は100未満です。’]
map()関数によってリストの配列を取り出し、それに対して、if文でチェックを行っています。
そして、チェックを行った結果をリストに格納して表示しています。
def(関数)とlambda式(無名関数)をコードで比較
defとlambda式を同じ処理を書いてコードを比較してみます。
リストの中にある数字が偶数である場合と奇数である場合で表示を変えてリストに格納するコードを作成します。
defで作成すると、下記のようになります。
defの例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
list1 = [0,120,2,99,450,44,88,1000,667,22] list2 = [] def check(): for i in list1: if i % 2 == 0: list2.append(str(i) + "は偶数です。") else: list2.append(str(i) + "は奇数です。") print(list2) check() |
出力結果
[‘0は偶数です。’, ‘120は偶数です。’, ‘2は偶数です。’, ’99は奇数です。’, ‘450は偶数です。’, ’44は偶数です。’, ’88は偶数です。’, ‘1000は偶数です。’, ‘667は奇数です。’, ’22は偶数です。’]
defで書くと、for文とif文がインデントで区別されていて分かりやすいです。
続いて、lambda式で書いてみると下記のようになります。
lambda式の例
1 2 3 4 5 6 7 |
list1 = [0,120,2,99,450,44,88,1000,667,22] func = (lambda i:str(i) + "は偶数です。" if i % 2 == 0 else str(i) + "は奇数です。") list3 = list(map(func,list1)) print(list3) |
出力結果
[‘0は偶数です。’, ‘120は偶数です。’, ‘2は偶数です。’, ’99は奇数です。’, ‘450は偶数です。’, ’44は偶数です。’, ’88は偶数です。’, ‘1000は偶数です。’, ‘667は奇数です。’, ’22は偶数です。’]
defに比べて、読み寄りにくいイメージがありますが、lambdaは1行で簡潔に関数を表現することができます。
つまり、単純な処理ならdefで名前をつけて定義するより、lambda式で書いた方がコードの量が少なくてすみます。
また、リストの処理を行うmap()関数やfilter()関数といった関数の引数に関数を指定したいときに組み合わせるのも良いと思います。
ST
株式会社flyhawkのSTです。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。