今回は、Pythonでif-else条件でlambdaを使う方法を学びます。
この2つを組み合わせることで、より高度な無名関数が必要になったときに非常に便利です。
どのプログラミング言語でも、条件文は学ぶべき基本的な概念の1つです。
条件文の主な用途は、指定された条件に従って動作することです。
すべてのプログラマーは、これらを学んでから、より高度なトピックに進まなければなりません。
ほとんどの言語では、条件文は3つしかありません。
- もし
- else
- else if
Pythonのラムダ関数って何?
Pythonのラムダ関数は、無名関数です。
この概念を使用する主な目的は、関数の作成を簡単にすることです。
ラムダ関数の構文
variable = lambda parameters_list : expression
|
help('lambda')
|
より詳細な情報を得るには、次のコマンドを入力します。
Lambdas*******
lambda_expr ::= "lambda" [parameter_list] ":" expression
lambda_expr_nocond ::= "lambda" [parameter_list] ":" expression_nocond
Lambda expressions (sometimes called lambda forms) are used to create
anonymous functions. The expression "lambda parameters: expression"
yields a function object. The unnamed object behaves like a function
object defined with:
def <lambda>(parameters):
return expression
Note that functions created with lambda expressions cannot contain
statements or annotations.
|
次のような出力が得られます。
add = lambda a, b: a + b
print(add(5, 5))
# output: 10 |
ラムダを使うと、初心者の方でも安心して始められるように、次のような操作を行うことができます。
- 加算
- 引き算
- 掛け算
- 除算
その他にも、以下のような高度な演算があります。
- 関数型プログラミングでの利用
- オブジェクト指向プログラミングでの使用。
- 特定のクラスのメソッドをパラメタ化します。
ラムダ関数の例をいくつか見てみましょう。
追加
コード
subtract = lambda a, b: a - b
print(add(100, 50))
# output: 50 |
コードは単純です。
まず、addというラムダオブジェクトを作る。
そして、そのラムダ式の中に二つのパラメータを格納します。
このパラメータは足し算をするための2つの数値です。
その後にコロンで区切って、その前に足し算の式を置いている。
サブタクション
コード
multiply = lambda a, b: a * b
print(multiply(100, 50))
# output: 5000 |
乗算
コード
variable_name = lambda parameters : code_for_if if (condition) else code_for_else
|
if-else 条件で Lambda を使用する
lambdaをif-else条件で使うのは便利なテクニックです。
これによって、コードの行数を減らすこともできます。
さて、ラムダの式部分には、一度に一つの式しか入れられないことに注意しましょう。
Python でラムダを if-else 条件で使用する場合の一般的な構文
conditional_lambda = lambda x: x/100 if x < 20 else x
print(conditional_lambda(4))
# output: 0.04 |
Pythonのif文とelse文は、コアなlambdaの実装と少し違うだけです。
そのため、if文の前にコードを宣言し、if文の中に条件を記述します。
もし必要であれば、elseブロックはif文の後に直接記述します。
# setup lambda check = lambda num : print(num, 'is Even') if num%2 == 0 else print(num, ' is Odd')
# input from usernum = int(input('Enter any number: '))
a = check(num)
print(a)
|
>>> Enter any number: 6565 is Odd |
説明
- ラムダオブジェクトをconditional_lambdaとして作成します。
-
- 変数xと式x/100を格納し、条件文と結合します。
- xが20以下なら100で割る、そうでなければそのまま表示する、というものです。
- そして、conditional_lambda関数を呼び出し、その中に4というパラメータを置きます。
- 4は20未満なので100で割られ、0.04が出力されます。
では、この関数を使って、他の高度な演算をどのように行うかを検討しよう。
例 ラムダを使って与えられた数字が偶数か奇数かを調べる
>>> Enter any number: -56-56 is Even |
結果を出力すると、以下の様になります。
check = lambda a, b : print(a,'is divisible by', b) if (a%b == 0) else print(a ,' is indivisible by ', b)
a = int(input('Enter value for a: '))
b = int(input('Enter value for b: '))
obj = check(a, b)
|
>>> Enter value for a: 45>>> Enter value for b: 4545 is divisible by 45 |
例 ラムダを使って、与えられた数字が偶数か奇数かをチェックします。
>>> Enter value for a: 3>>> Enter value for b: 93 is indivisible by 9 |
結果を出力すると、以下の様になります。


説明
- まず、lambdaの文を定義します。この関数は2つのパラメータa,bを持ち、関数名はcheckとします。
- 次にifブロックが来る。aはbで割り切れる」というのが主な条件であり、これが真であればブロックは(“a is divisible by b”)と表示します。しかし、余りが0でない場合は、elseブロックでindivisibleと表示されます。
-
- 次に、関数オブジェクトを obj として作成し、check(a, b) に関する関数を呼び出します。
参照フレーム

ラッピング
こうして、このトピックは終わりを迎えました。
Lambdaを使ったif-else条件分岐は、1行コードの可視性を維持するための重要なトピックの1つです。
一番良いのは、コアの構文を変更する必要がなく、条件などを編集するだけで良いということです。
読者はコードを修正し、何度も試して理解する必要があります。