Python ラムダ閉鎖

Rohan Timalsina 2023年6月21日
  1. Python で Lambda 関数を使用するための構文
  2. Python で Lambda 関数を使用する
  3. Python でクロージャ関数を使用する
Python ラムダ閉鎖

ラムダ関数は名前なしで定義されています。 Python では無名関数とも呼ばれます。

def キーワードを使用して Python で通常の関数を定義しますが、lambda キーワードを使用してラムダ関数を定義します。

このチュートリアルでは、Python でラムダ関数とクロージャーを使用する方法を説明します。

Python で Lambda 関数を使用するための構文

Python のラムダ関数の構文は次のとおりです。

lambda arguments: expression

ラムダ関数は複数の引数のみを持つことができますが、式は 1つだけです。 式を評価し、結果を返します。

Python で Lambda 関数を使用する

次の例では、指定された値に 5 を加算し、結果を出力します。

def total(a):
    return a + 5


print(total(10))

出力:

15

複数の引数を追加し、結果を返します。

def total(a, b, c):
    return a + b + c


print(total(10, 15, 20))

出力:

45

上記の例では、lambda a,b,c: a+b+c はラムダ関数で、a,b,c は引数で、a+b+c は式です。 式が計算され、出力に表示されます。

ラムダ関数には名前がなく、変数 total に割り当てられます。

この行:

def total(a, b, c):
    return a + b + c

これは次と同等です。

def total(a, b, c):
    return a + b + c

Python でクロージャ関数を使用する

クロージャーについて学習する前に、ネストされた関数と非ローカル変数に関する Python の概念を理解する必要があります。

ネストされた関数は、別の関数内で定義され、外側のスコープの変数にアクセスできます。

このような非ローカル変数は、そのスコープ内でのみアクセスでき、Python のスコープ外ではアクセスできません。

次の例は、非ローカル変数にアクセスするネストされた関数を示しています。

def outerFunc(txt):  # outer enclosing function
    def innerFunc():  # nested function
        print(txt)

    innerFunc()


outerFunc("Hello World")

出力:

Hello World

ご覧のとおり、ネストされた関数 innerFunc は、外側の関数 outerFunc の非ローカル変数 txt にアクセスしています。

クロージャは、スコープ外に出てもスコープ内の値を記憶できる関数オブジェクトです。

def outerFunc(txt):  # outer enclosing function
    def innerFunc():  # nested function
        print(txt)

    return innerFunc


myFunc = outerFunc("Hello World")
myFunc()

出力:

Hello World

この例では、ネストされた関数は innerfunc() 関数を呼び出す代わりに返します。 outerFunc() 関数はテキスト Hello World で呼び出され、変数 myFunc に割り当てられます。

また、myFunc() を呼び出すと、値がスコープ外に記憶されていました。

元の関数を削除しても、囲んでいるスコープの値は引き続き記憶されます。

del outerFunc
myFunc()

出力:

Hello World

以下は、Python でラムダ関数とクロージャーを使用する簡単なデモです。

def sum(x):
    def total():
        def calc(x):
            return x + 5

        print(calc(x))

    return total


myFunc = sum(5)
myFunc()

出力:

10

これで、Python でラムダ関数とクロージャを使用する方法を理解できたはずです。 このチュートリアルがお役に立てば幸いです。

著者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

関連記事 - Python Lambda