無名関数

非常に短いコールバック関数を定義することを考えたことはありますが、def を使用してそのような長い関数を記述したくないですか? ショートカットはありますか?答えは「はい」です。

Python はラムダを使用して匿名関数を作成します。つまり、関数の定義に標準形式の def ステートメントは使用されなくなりました。

匿名関数には主に次の特徴があります。

lambda は単なる式であり、関数本体は def よりもはるかに単純です。

ラムダの本体は式であり、コード ブロックではありません。ラムダ式にカプセル化できるロジックは限られています。

ラムダ関数には独自の名前空間があり、独自のパラメータ リストの外部またはグローバル名前空間内のパラメータにアクセスできません。

基本構文

lambda [arg1 [,arg2,.....argn]]:expression

例:

# -*- coding: UTF-8 -*-
sum = lambda num1 , num2 : num1 + num2;
print( sum( 1 , 2 ) )

出力結果:

3

注:ラムダ式を使用すると、次のことが可能になります。単純な関数を定義できますが、その用途は限定されています。指定できる式は 1 つだけであり、その値が最終的な戻り値となります。つまり、複数のステートメント、条件式、反復、例外処理などの他の言語機能を含めることはできません。

匿名関数には、注意が必要な特別な問題があります。たとえば、上記の例を変更します:

# -*- coding: UTF-8 -*-
num2 = 100
sum1 = lambda num1 : num1 + num2 ;
num2 = 10000
sum2 = lambda num1 : num1 + num2 ;
print( sum1( 1 ) )
print( sum2( 1 ) )

出力はどうなると思いますか?最初の出力は 101、2 番目の出力は 10001、結果はそうではありません。出力結果は次のようになります:

10001
10001

これは主に、ラムダ式の num2 が自由変数であり、値がバインドされているためです。 runtime を定義する際にバインドするのではなく、関数のデフォルト値パラメータ定義とは異なります。したがって、この状況が発生した場合は、最初の解決策を使用することをお勧めします。

学び続ける
  • おすすめコース
  • コースウェアのダウンロード
現時点ではコースウェアはダウンロードできません。現在スタッフが整理中です。今後もこのコースにもっと注目してください〜