Pythonで条件文を使ったラムダ

スポンサーリンク

今回は、Pythonでif-else条件でlambdaを使う方法を学びます。

この2つを組み合わせることで、より高度な無名関数が必要になったときに非常に便利です。

どのプログラミング言語でも、条件文は学ぶべき基本的な概念の1つです。

条件文の主な用途は、指定された条件に従って動作することです。

すべてのプログラマーは、これらを学んでから、より高度なトピックに進まなければなりません。

ほとんどの言語では、条件文は3つしかありません。

  1. もし
  2. else
  3. 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

ラムダを使うと、初心者の方でも安心して始められるように、次のような操作を行うことができます。

  1. 加算
  2. 引き算
  3. 掛け算
  4. 除算

その他にも、以下のような高度な演算があります。

  1. 関数型プログラミングでの利用
  2. オブジェクト指向プログラミングでの使用。
  3. 特定のクラスのメソッドをパラメタ化します。

ラムダ関数の例をいくつか見てみましょう。

追加

コード

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

説明

  1. ラムダオブジェクトをconditional_lambdaとして作成します。
    1. 変数xと式x/100を格納し、条件文と結合します。
  2. xが20以下なら100で割る、そうでなければそのまま表示する、というものです。
  3. そして、conditional_lambda関数を呼び出し、その中に4というパラメータを置きます。
  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 Syntax
Lambda If Else Block

説明

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

参照フレーム

Is there a way to perform "if" in python's lambda?
In Python 2.6, I want to do: f = lambda x: if x==2 print x else raise Exception() f(2) #should print "2" f(3) #should throw an exception This clearly...

ラッピング

こうして、このトピックは終わりを迎えました。

Lambdaを使ったif-else条件分岐は、1行コードの可視性を維持するための重要なトピックの1つです。

一番良いのは、コアの構文を変更する必要がなく、条件などを編集するだけで良いということです。

読者はコードを修正し、何度も試して理解する必要があります。

タイトルとURLをコピーしました