Pythonでラムダ式を使うときの注意点と制限事項をやさしく解説!初心者でもわかる
生徒
「Pythonのラムダ式って便利そうだけど、使うときに気をつけることってありますか?」
先生
「はい、ラムダ式は簡単に使えますが、いくつか注意したいポイントや制限があります。知らないと困ることもあるので、順番に説明しますね。」
生徒
「ぜひ教えてください!」
先生
「では、まずラムダ式の特徴と制限から始めましょう。」
1. ラムダ式は「簡単な処理だけ」に使うこと
ラムダ式は、名前のない小さな関数を一行で書くものです。ただし、書ける内容は「1つの式(計算や処理)」だけに限られています。複雑な処理や複数の文(文とは処理のまとまり)を書くことはできません。
例えば、
# OK:1つの式だけ
lambda x: x + 1
# NG:複数の処理は書けない
lambda x:
y = x + 1
return y
このように複数行の処理は書けないので、複雑な関数は通常のdefを使いましょう。
2. ラムダ式内に代入文(変数に値を入れる処理)は書けない
ラムダ式の中では変数への代入(=を使って値を入れること)はできません。これはPythonの決まりです。
なので、
# これはエラーになります
lambda x: y = x + 1
代入したい場合は普通の関数にしましょう。
3. ラムダ式は名前がなく使い捨ての関数
ラムダ式は「名前をつけずにその場で使う小さな関数」です。使い捨てが多いので、何度も使いたい関数はdefで名前をつけて作る方がわかりやすいです。
例として、
# ラムダ式を変数に入れることはできる
double = lambda x: x * 2
print(double(5)) # 10
このように変数に入れることはできますが、あまり長くて複雑な処理は向きません。
4. ラムダ式は可読性(読みやすさ)に注意
ラムダ式はコードが短く書けて便利ですが、複雑な処理を一行にまとめると他の人や自分があとで読んだときにわかりにくくなります。
初心者のうちは、無理にラムダ式で書くより、普通の関数defを使った方が理解しやすいです。
5. ラムダ式はステートメント(文)を含められない
ステートメントとは「if文」や「for文」などの処理の命令文のことです。ラムダ式は式(結果を返す計算や処理)だけなので、こうした命令文は書けません。
例えば、条件分岐をしたいときは普通の関数で書きます。
# これはエラーになる
lambda x: if x > 0: x else: -x
# こう書くのが普通
def absolute(x):
if x > 0:
return x
else:
return -x
どうしても一行で書きたい場合は、条件式(ifを式として使う)が使えますが、複雑になると読みにくいので注意が必要です。
6. ラムダ式のスコープ(変数の範囲)に注意
ラムダ式で使う変数は、作ったときの周囲の環境(スコープ)に依存します。外側の変数の値を使うこともできますが、予期しない動きになることもあります。
たとえば、ループでラムダ式を作ると変数の値が変わってしまい、全部同じ結果になることがあります。
funcs = []
for i in range(3):
funcs.append(lambda: i)
for f in funcs:
print(f()) # 3, 3, 3 と出力される
このような場合は、デフォルト引数を使うなど工夫が必要です。
7. まとめは別記事で!今回はここまで
今回はPythonのラムダ式を使うときの注意点や制限事項を初心者向けに解説しました。ラムダ式は便利ですが、使いどころや制限を理解して、無理に使いすぎないことが大切です。