今回は、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 user num = int ( input ( 'Enter any number: ' ))
a = check(num)
print (a)
|
>>> Enter any number: 65 65 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: 45 45 is divisible by 45 |
例 ラムダを使って、与えられた数字が偶数か奇数かをチェックします。
>>> Enter value for a: 3 >>> Enter value for b: 9 3 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つです。
一番良いのは、コアの構文を変更する必要がなく、条件などを編集するだけで良いということです。
読者はコードを修正し、何度も試して理解する必要があります。