-1

まあ、私はラムダ関数について読み込もうとしましたが、そのフローとPythonインタープリターによる処理方法についていくつかの質問を説明するリンクを見つけられなかったか、正しく理解できなかった可能性があります. いくつか質問があります。誰かが私のためにそれらを明確にしてください。コードは次のとおりです。

def f1(n):
    print 'in f1, value is : ', n
    return lambda x: x+n

if __name__ == '__main__':
    f= f1(100)
    print f(1)
    print f(3)
    print f1(10)
    print f(5)
    print type(f1)

出力は次のとおりです。

in f1, value is :  100
101
103
in f1, value is :  10
<function <lambda> at 0x019C66B0>
105
<type 'function'>

私の質問は:

  • Forステートメントf(1)とWhyステートメントが呼び出されなかった、および呼び出されたときに、f(3)なぜlambda ステートメントがコンパイルされなかったのか。printf1(100)
  • 関数内のxとの関係は何ですか。nf1
  • f(5)15 ( 10 + 5) になると思いました
  • 説明してくださいprint f1(10)
  • lambda x:また、ここでの意味を教えてください。このブロックの x 名ですか? 説明してください。

皆さんありがとう。

4

3 に答える 3

2

まず、Python ではすべてがオブジェクトであることを理解する必要があります。そして機能はあらゆるものに備わっています。

function から、f1()実際には関数への参照を返していlambdaます。任意の変数に割り当てることができます。

例:

>>> f = lambda x: x   # Assign reference to lambda function to f.
# Now you can call lambda function using `f`  
>>> f(1)
1

それでは、例を進めましょう。あなたの最初のステートメントは次のifとおりです。

f = f1(100)

この割り当ては次と同等です。

f = lambda x: x + 100  # Replace `n` with `100` in return statment in `f1`.

したがって、次の 2 つの呼び出しは非常に簡単です。

print f(1)  # returns `1 + 100` = 101 (Replace `x` with `1`.
print f(3)  # returns `3 + 100` = 103

xこれで、との関係が得られますn。「x」は引数 to に置き換えられf、「n」は引数 to に置き換えられますf1

print f1(10) について説明してください

f1()ラムダ関数への参照を返します。そして、それが印刷されます。出力は、以下のスニペットで得られるものと似ています。

>>> def func():
        return 5

>>> func
<function func at 0x021F0F30>

ただし、 f1 はラムダ関数のみを返すため、 にfunc置き換えられます。lambda

f(5) は 15 ( 10 + 5) になると思いました

前のステートメントでf1toの戻り値を再割り当てしていれば、その出力が得られます。fしかし、 の値を印刷したばかりなので、f(10)まだfバインドされています - lambda x: x + 100。だからあなたは得る105

そしてf1、関数のみであるの型を出力します。

print type(f1)
于 2013-07-24T12:06:20.397 に答える
1

ラムダは、1 行で関数を記述する方法にすぎません。

最初は意味がわからないかもしれませんが、わずかに異なる関数を多数生成したり、一度しか使用できない関数を指定したり、その他のさまざまなインスタンスすべてを指定したりするのに役立ちます。

もう少し理解を深めるために、次のコードを想像してみてください。自分のコードとは少し異なります。

def f2(n):

    def g2(x):
        return x + n

    return g2

これは、自分のコードが行うこととほとんど同じことを行いますが、最初の関数内で関数を定義し、それを返すことによって行います。これは基本的にコードと同じことを行います。

于 2013-07-24T12:10:03.570 に答える