今回は、Pythonのlambda関数内でif文を使う方法についてご紹介します。
lambda関数とは
Pythonのlambda関数は、名前を持たない小さな関数を簡単に定義できる構文です。
通常のdef文を使うほど大げさではない処理を一行で記述したいときに役立ちます。
ただし、複数行にわたる処理や複雑な制御構文を記述できないという制約があるため、使いどころを見極めることが重要です。
lambda関数内でif文を使う基本例
lambda関数内では、複数行のif文を使うことはできません。
代わりに条件式(いわゆる三項演算子)を用いることで、一行で条件分岐を表現します。
基本構文は以下のとおりです。
1 2 |
# 真の場合の値 if 条件 else 偽の場合の値 の順序で記述します f = lambda x: "Positive" if x > 0 else "Negative" |
この例では、引数xが0より大きければ”Positive”、それ以外の場合は”Negative”を返します。
単純な条件分岐であれば、非常にスッキリと書けるのが特徴です。
複数の条件を扱う具体例
lambda関数内でさらに多段階の分岐をしたい場合は、条件式をネストして書くことができます。
たとえば、数値が正か負かだけでなく、0であるケースも判定したい場合には以下のように書けます。
1 2 3 4 5 6 7 |
# 0を含めた3パターンの判定 f = lambda x: "Positive" if x > 0 else ("Zero" if x == 0 else "Negative") # 実際に複数の値で確認してみます numbers = [-1, 0, 1] results = [f(num) for num in numbers] print(results) |
[‘Negative’, ‘Zero’, ‘Positive’]
このようにifとelseを重ねることで、多段階の条件分岐を一行で表現できます。
ただし、ネストが増えるほど可読性が下がるため、複雑な処理は通常の関数定義に切り替えることがおすすめです。
論理演算子を用いた条件表現
論理演算子andとorを活用して、簡易的な条件分岐を行う方法もあります。
たとえば、以下のように書くことで、数値が正なら”Positive”、そうでなければ”Non-positive”を返すlambda関数を定義できます。
1 2 3 4 5 |
f = lambda x: (x > 0 and "Positive") or "Non-positive" # 動作確認 print(f(3)) print(f(0)) |
Positive
Non-positive
x > 0がTrueの場合は”Positive”が返り、Falseの場合は”Non-positive”が返ります。
この方法はシンプルですが、Falseとみなされる値(空文字や0など)を返すと想定と異なる動作となることがあるため、注意が必要です。
よくあるエラーや注意点
以下の点に注意することで、lambda関数内での条件分岐をより安全に行うことができます。
- 複数行のif文は書けない: lambda関数は「式」のみ記述可能です。
- 可読性に要注意: 条件が複雑になった場合は通常のdef文に切り替えるほうが分かりやすくなります。
- 論理演算子の落とし穴: andやorを使った式でFalseとみなされる値が返ると、意図しない結果につながることがあります。
これらを踏まえて、単純な条件判定にはlambda関数を使い、複雑な処理はdef文に任せるという使い分けがおすすめです。
まとめ
Pythonのlambda関数は、簡潔に一行で関数を定義できる便利な構文です。
if文の代わりに条件式(三項演算子)を使うことで、一行で条件分岐を表現できます。
可読性や保守性を意識して、状況に応じて使い分けることが大切です。