Pythonでのlambdaの詳細(内蔵関数を含む)


文書ディレクトリ
  • 一、lambdaとは何ですか.
  • 1.lambda構文
  • 2.lambda文法具体紹介
  • 二、lambdaの使用
  • 1.定義
  • .呼び出し
  • 3.置換
  • 4.戻り値
  • とする.
  • 三、lambdaをパラメータとする
  • 1.map関数
  • 2.reduce関数
  • 3.filter関数
  • 4.sorted関数
  • 5.辞書における使用例
  • 結語
  • 一、lambdaとは何ですか.
    pythonはlambdaを使用して匿名関数を作成します.
    対比defキーワードで作成されるのは名前付き関数であり,lambdaキーワードで作成されるのは名前のない関数である.
    1.lambda構文
    その文法は唯一で、その形式は以下の通りです.
    lambda argument_list: expression
    ここでlambdaはPythonが予約したキーワード、argument_Listとexpressionはユーザーによってカスタマイズされます.
    以下のように簡単に理解できます.
    Lambdaパラメータ1,パラメータ2,...:式
    2.lambda文法の具体的な紹介
    1、ここのargument_Listはパラメータリストで、Pythonの関数(function)のパラメータリストと同じ構造です.
    2、ここのexpressionはパラメータに関する式です.式に現れるパラメータはargument_listには定義があり、式は単行のみです.
    3、ここのlambda argument_List:expressionは関数を表します.この関数をlambda関数と言います.
    4、lambda関数入力はパラメータリストargument_listの値は、式expressionに基づいて計算された値を出力します.
    二、lambdaの使用
    1.定義
    lambda x,y,z:x+y+z
    

    同等:
    def func(x,y,z):
        return x+y+z
    

    2.呼び出し
    方法1:
    ダイレクトコール
    res=(lambda x,y,z:x+y+z)(1,2,3)
    

    方式2:
    lambda関数を変数に割り当て、この変数によってlambda関数を間接的に呼び出します.
    add=lambda x,y:x+y 
    res=add(1,2)
    

    実行文add=lambda x,y:x+yは、加算関数lambda x,y:x+yを定義し、変数addに値を割り当てます.
    このように変数addは加算機能を有する関数となる.例えばadd(1,2)が実行され、出力は3となる.
    ただし、「匿名」の本質は名前がないことなので、ここで匿名関数に名前を指定するのは意味がありません.
    3.置換
    lambda関数を他の関数に割り当て、他の関数をlambda関数で置き換えます.
    たとえば、標準ライブラリtimeの関数sleepの機能をブロックするには、プログラムの初期化時に呼び出すことができます.
    time.sleep=lambda x:None
    

    これにより、後続コードでtimeライブラリを呼び出すsleep関数は、既存の機能を実行しません.
    たとえばtime.sleep(3)を実行すると,プログラムは3秒間休眠せず,何もしない.
    4.戻り値
    Lambda関数を他の関数の戻り値として呼び出し者に返します.
    関数の戻り値は、関数であってもよい.例:
    return lambda x, y: x+y
    

    加算関数を返します.
    この場合,lambda関数は実際にはある関数の内部に定義された関数であり,ネスト関数,あるいは内部関数と呼ばれる.
    これに対応して、ネストされた関数を含む関数を外部関数と呼ぶ.
    内部関数は外部関数の局所変数にアクセスでき,この特性もクローズドパッケージプログラミングの基礎である.
    三、lambdaをパラメータとする
    lambda関数はパラメータとして他の関数に渡すことができます.
    一部の組み込み関数は、パラメータとして関数を受信します.
    たとえば、関数map、reduce、filterは反復可能なオブジェクトを処理するために使用できる反復プロトコルをサポートします.
    1.map関数
    map()は、指定した関数に基づいて指定したシーケンスをマッピングします.
    map()関数構文:
    map(function, iterable, …)
    最初のパラメータfunctionは、パラメータシーケンスの各要素でfunction関数を呼び出し、各function関数の戻り値を含む新しいリストを返します.
    iterableは1つ以上のシーケンスを表します
    このときlambda関数は、各要素に対する共通の操作を指定するために使用されます.
    arrayの各要素を平方処理し、map関数を使用できます.
    map関数は2つのパラメータを受信することができ、1つは関数であり、もう1つは反復可能なオブジェクトであり、具体的な使い方は以下の通りである.
    >>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])
    [1, 4, 9, 16, 25]
    

    リストを使用してresを順次反復し、取得した値をリスト要素として使用します.
    mapはarrayを順次反復し,得られた値は匿名関数(有名関数でもよい)に順次伝達され,map関数で得られた結果は反復器である.
    2.reduce関数
    reduce()関数は、パラメータシーケンス内の要素を蓄積します.
    reduce()関数構文:
    reduce(function, iterable[, initializer])
    reduce関数は、3つのパラメータを受信できます.1つは関数で、2つ目は反復可能オブジェクトで、3つ目は初期値です(オプション、デフォルトは0).
    関数は、1つのデータセット(チェーンテーブル、タプルなど)のすべてのデータを次のように操作します.
    reduceに渡された関数function(2つのパラメータがある)で集合中の1,2番目の要素を先に操作し,得られた結果を3番目のデータとfunction関数で演算し,最後に1つの結果を得た.
    このときlambda関数は、リスト内の2つの隣接する要素の結合条件を指定するために使用されます.
    注意:Python 3.x reduce()はfunctoolsモジュールに移動されています.使用する場合は、reduce()関数を呼び出すためにfunctoolsモジュールを導入する必要があります.
    from functools import reduce
    
    def add(x, y) : #     
        return x + y
    sum1 = reduce(lambda x, y: x+y, [1,2,3,4,5])
    print(sum1) #    :15
    

    3.filter関数
    filter()関数は、シーケンスをフィルタリングし、条件に合わない要素をフィルタリングし、反復器オブジェクトを返します.リストに変換する場合はlist()を使用して変換できます.
    この受信パラメータは2つあり、1つ目は関数、2つ目はシーケンスであり、シーケンスの各要素はパラメータとして関数に渡されて判断され、その後TrueまたはFalseに戻り、最後にTrueに戻った要素を新しいリストに格納します.
    このときlambda関数は、リスト要素をフィルタする条件を指定するために使用されます.
    たとえば
    filter(lambda x: x % 3 == 0, [1, 2, 3])
    

    リスト[1,2,3]の3で割り切れる要素をフィルタリングし、その結果[3]を指定します.
    4.sorted関数
    sorted()関数は、反復可能なすべてのオブジェクトをソートします.
    sortとsortedの違い:
    sortはlistに適用する方法であり,既存のリストを操作し,戻り値がない.
    sortedは、反復可能なすべてのオブジェクトをソートし、元の操作ではなく**の新しいlist**を返します.
    sorted構文:
    sorted(iterable, cmp=None, key=None, reverse=False)
    パラメータの説明:
    iterable:反復可能なオブジェクト.
    cmp:2つのパラメータを持つ比較関数.パラメータの値は反復可能なオブジェクトから取り出されます.この関数が守らなければならないルールは、より大きい場合は1、より小さい場合は-1、等しい場合は0です.
    key:主に比較に使用される要素で、1つのパラメータしかありません.具体的な関数のパラメータは反復可能なオブジェクトから取り、反復可能なオブジェクトの1つの要素を指定してソートします.
    reverse:ソート規則、reverse=True降順、reverse=False昇順(デフォルト).
    >>> L=[('b',2),('a',1),('c',3),('d',4)]
    >>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))   #   cmp  
    [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
    >>> sorted(L, key=lambda x:x[1])               #   key
    [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
     
    >>> students = [('Jack', 'A', 15), ('Tom', 'B', 12), ('Dave', 'B', 10)]
    >>> sorted(students, key=lambda s: s[2])            #      
    [('Dave', 'B', 10), ('Tom', 'B', 12), ('Jack', 'A', 15)]
     
    >>> sorted(students, key=lambda s: s[2], reverse=True)       #    
    [('Jack', 'A', 15), ('Tom', 'B', 12), ('Dave', 'B', 10)]
    >>>
    

    5.辞書での使用例
    匿名関数は有名関数と同じ役割ドメインを持つが,匿名は参照カウントが0であり,1回で解放されることを意味する.
    したがって、匿名関数は一時的に使用されるシーンで使用され、匿名関数は通常、他の関数と組み合わせて使用されます.
    辞書の例を次に示します.
    salaries={
         
        'A':6000,
        'B':7000,
        'C':10000,
        'D':8000
    }
    

    給与の最大値と最小値を取得するには、内蔵関数maxとminを使用します.
    >>> max(salaries)
    'C'
    >>> min(salaries)
    'A'
    

    内蔵maxとminは反復器プロトコルをサポートし、動作原理は反復辞書であり、取得は辞書のキーである.
    したがって、キーの最大値と最小値を比較し、比較値の最大値と最小値を比較したい場合は、次のように変更します.
    >>> max(salaries,key=lambda k:salaries[k]) 
    

    関数maxは辞書salariesを反復し、1つの「人名」を取り出すたびにパラメータとして指定した匿名関数に渡し、匿名関数の戻り値を比較根拠に、最終的に最も給料の高い人の名前を返します.
    同様に、辞書を直接ソートします.デフォルトでは、辞書のキーに従ってソートされます.
    >>> sorted(salaries)
    ['A', 'B', 'C', 'D']
    

    締めくくり
    以上がPythonのlambdaの詳細(内蔵関数を含む)であり、皆さんの役に立つことを願っています.もし皆さんに何か質問があったらメッセージをください.できるだけ早く返事します.ここでもCSDNの応援ありがとうございます!