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 でラムダ関数とクロージャを使用する方法を理解できたはずです。 このチュートリアルがお役に立てば幸いです。