45

lambda関数と通常の関数(で定義される)の違いに興味がありdefます-Pythonレベルで。(プログラマーにとっての違いと、それぞれをいつ使用するかはわかっています。)

>>> def a():
    return 1

>>> b = lambda: 1
>>> a
<function a at 0x0000000004036F98>
>>> b
<function <lambda> at 0x0000000004031588>

ご覧のとおり、Pythonはそれが関数であり、通常の関数であることを認識しています。何故ですか?それらとPythonの違いは何ですか?blambdaa

4

6 に答える 6

38

これらは同じ型であるため、同じように扱われます。

>>> type(a)
<type 'function'>
>>> type(b)
<type 'function'>

Python はb、ラムダ関数として定義されていることも認識しており、それを関数名として設定します。

>>> a.func_name
'a'
>>> b.func_name
'<lambda>'

つまり、関数が取得する名前に影響しますが、Python に関する限り、どちらも関数であり、ほとんど同じ方法で使用できることを意味します。酸洗に関する関数とラムダ関数の重要な違いについては、以下の mgilson のコメントを参照してください。

于 2012-09-04T13:47:14.157 に答える
15

唯一の違いは、(a) ラムダの本体は単一の式のみで構成でき、その結果は作成された関数から返されること、(b)lambda式は関数オブジェクトに評価される式であるのに対し、defステートメントは値を持たず、関数オブジェクトを作成して名前にバインドします。

他のすべての重要な点では、それらは同一のオブジェクトになります。同じスコープとキャプチャ ルールが適用されます。(重要でない違いは、 で作成さlambdaれた関数のデフォルトfunc_name"<lambda>"です。これは、難解なケース (関数をピクルしようとするなど) での操作に影響を与える可能性があります。)

于 2012-09-04T13:50:07.413 に答える
0

lambda無名関数を作成します。この考え方は、関数型プログラミング言語から取り入れられています。mapこのようにして、関数を作成し、やなどの他の関数に渡すことができますfilter。(ここを見てください)
通常の関数をこれらの関数に渡すこともできますが、ほとんどの関数は単純で他の場所では使用されないため、新しい関数を定義するプロセス全体を実行するのは不便です。

例として、これを見てください:

>>> a = [1, 2, 3, 4]
>>> print map( lambda x : x*2 + 1, a )
[3, 5, 7, 9, 11]
于 2012-09-04T14:01:23.580 に答える