Pythonのlambda関数の完全な詳細&巧みな運用

28208 ワード

文書ディレクトリ
  • 一、前言
  • 二、lambda文法
  • 三、lambda特性
  • 四、lambdaのよくある使い方
  • 五、lambda用法の高次関数
  • 一、前言
    Lambda関数はPythonプログラミング言語で使用頻度が非常に高く、非常に柔軟で巧みに使用されています.では、lambdaとは何ですか.どのような使い方とシーンを適用しますか?lambdaの神秘的なところを一緒に解読させていただきます!好文章记得收藏+点赞+关注额!!!
    ---- Nick.Peng
    二、lambda文法
  • lambda関数の構文は1つの文のみを含み、表現形式は以下の通りである:lambda [arg1 [,arg2,.....argn]]:expression
  • のうち、lambdaはPythonが予約したキーワードであり、[arg...]およびexpressionはユーザによってカスタマイズされる.
  • は以下のように具体的に説明する:[arg...]はパラメータリストであり、その構造はPythonにおける関数(function)のパラメータリストと同じである.[arg...]は非常に多くの形式を持つことができる.たとえば、
    a, b
    a=1, b=2
    *args
    **kwargs
    a, b=1, *args
     
    ......
    
    expressionはパラメータ式であり、式に表示されるパラメータは[arg......]で定義する必要があり、式は単行でのみ、式は1つのみです.以下はすべて合法的な式です:
    1
    None
    a + b
    sum(a)
    1 if a >10 else 0
    ......
    
  • 三、lambda特性
  • lambda関数は匿名です.匿名関数とは、一般的には名前のない関数です.Lambda関数には名前がありません.
  • lambda関数には入力と出力があります.入力はパラメータリストargument_に入力されます.listの値、出力は式expressionに基づいて計算された値です.
  • lambda関数は自分のネーミングスペースを持っています.自分のパラメータリスト以外やグローバルネーミングスペースのパラメータにアクセスできず、非常に簡単な機能しかできません.一般的なlambda関数の例:
    lambda x, y: x*y			#      x y,       x*y
    lambda:None					#         ,   None
    lambda *args: sum(args)		#          ,       (                 )
    lambda **kwargs: 1			#           ,   1
    
  • 四、lambdaのよくある使い方
    lambda構文は固定されているため,本質的にはlambda関数を定義する1つの用法しかない.実際には、このlambda関数がシーンを適用することによって、lambda関数の使い方を以下のように拡張することができます.
  • 1、lambda関数を変数に割り当て、この変数によってlambda関数を間接的に呼び出す.例:add = lambda x, y: x+yは、加算関数lambda x, y: x+yを定義し、変数addに値を付与することに相当し、変数addは、加算機能を有する関数を指す.このとき、add(1, 2)を実行すると、その出力結果は3になります.
  • 2、lambda関数を他の関数に割り当て、他の関数をこのlambda関数で置き換えます.例:
    #       time    sleep     (Mock),             :
    time.sleep=lambda x: None
    #   ,        time  sleep            。
    #   :
    time.sleep(3)	#        3   ,    lambda   None,            
    
  • 3、lambda関数をパラメータとして他の関数に渡す.典型的な使い方は、以下によく見られるいくつかの高次関数です.

  • 五、lambda用法の高次関数
  • map()関数:説明:map()は、提供された関数に基づいて指定されたシーケンスを します.最初のパラメータfunctionは、パラメータシーケンスの各要素でfunction関数を呼び出し、各function関数の戻り値を含む新しいリストを返します.構文:map(function, iterable, ...)パラメータ:function------>関数iterable------>1つ以上のシーケンス戻り値:Python 2.xバージョンはリストPython 3を返す.xバージョンは反復器の例を返します:
    # ===========    :===========
    # 1、     
    def square(x):
    	return x ** 2
    
    map(square, [1,2,3,4,5])	#            
    #   :
    [1, 4, 9, 16, 25]
    
    # ===========      :============
    # 2、     ,lambda   
    map(lambda x: x ** 2, [1, 2, 3, 4, 5])
    #   :
    [1, 4, 9, 16, 25]	 
    
    # 3、      ,                 
    map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
    #   :
    [3, 7, 11, 15, 19]
    
    
  • reduce()関数:説明:reduce()関数は、パラメータシーケンスの に対して使用されます.関数は、1つのデータ集合(チェーンテーブル、メタグループなど)のすべてのデータを、reduceに渡された関数function(2つのパラメータがある)で集合の1、2番目の要素を先に操作し、得られた結果を3番目のデータとfunction関数で演算し、最後に1つの結果を得る.構文:reduce(function, iterable[, initializer])パラメータ:function------>関数、2つのパラメータiterable------>反復可能オブジェクトinitializer------>オプション、初期パラメータ戻り値:関数計算結果を返します.例:
    # ===========    :===========
    # 1、    
    def add(x, y):            
    	return x + y
    
    reduce(add, [1, 3, 5, 7, 9])    #        :1+3+5+7+9
    #   :
    25
    
    """
    ===========      :===========
       reduce(add, [1, 3, 5, 7, 9]) ,reduce        :
    1	        :f(1, 3),   4;
    2	      3     :f(4, 5),   9;
    3	      4     :f(9, 7),   16;
    4	      5     :f(16, 9),   25;
    5	          ,    ,    25。
    """
    # ===========      :===========
    # 2、    ,lambda   
    reduce(lambda x, y: x + y, [1, 2, 3, 4, 5])
    #   :
    15
    
    #            Python    sum(),     reduce。
    	
    # 3、         [1, 3, 5, 7, 9]       13579,reduce       :
    from functools import reduce
    
    def fn(x, y):
    	return x * 10 + y
    
    reduce(fn, [1, 3, 5, 7, 9])
    #   :
    13579
    
  • sorted()関数:説明:sorted()関数は、反復可能なすべてのオブジェクトに対して を行う.sortとsortedの違い:sortはlistの1つの方法であり、sortedはすべての反復可能なオブジェクトをソートすることができる.Listのsortメソッドは、既存のリストを操作し、戻り値がなく、組み込み関数sortedメソッドは、元の操作ではなく、新しいlistを返します.構文:sorted(iterable[, cmp[, key[, reverse]]])パラメータの説明:iterable------>反復可能オブジェクト.cmp------>比較の関数です.これは2つのパラメータを持ち、パラメータの値は反復可能なオブジェクトから取り出されます.この関数が守らなければならないルールは、大きい場合は1を返し、小さい場合は-1を返し、等しい場合は0を返します.key------>は主に比較に使用される要素で、1つのパラメータしかありません.具体的な関数のパラメータは反復可能なオブジェクトから取り、反復可能なオブジェクトの1つの要素を指定してソートします.reverse------>ソート・ルール、reverse=True降順、reverse=False昇順(デフォルト).戻り値:並べ替えられたリストを返します.例:
    # ===========    :===========
    # 1、    
    a = [5,7,6,3,4,1,2]
    b = sorted(a)       #   sorted,     ,     a  
    print(a)
    [5, 7, 6, 3, 4, 1, 2]
    print(b)
    [1, 2, 3, 4, 5, 6, 7]
    
    # ===========      :===========
    L=[('b',2),('a',1),('c',3),('d',4)]
    # 2、     cmp   
    sorted(L, cmp=lambda x,y:cmp(x[1],y[1]))
    #   :
    [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
    # 3、     key   
    sorted(L, key=lambda x:x[1])
    #   :
    [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
    
    # 4、     
    students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
    sorted(students, key=lambda s: s[2])
    #   :
    [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
    # 5、     
    sorted(students, key=lambda s: s[2], reverse=True)
    #   :
    [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
    
  • filter()関数:説明:filter()関数はシーケンスをフィルタリングし、条件に合致しない要素をフィルタリングし、条件に合致する要素からなる新しいリストを返します.2つのパラメータが受信され、1つ目は関数、2つ目はシーケンスであり、シーケンスの各要素はパラメータとして関数に渡され、TrueまたはFalseに戻り、最後にTrueに戻った要素を新しいリストに配置します.構文:filter(function, iterable)パラメータ:function---->判断関数.iterable------>反復可能オブジェクト.戻り値:Pyhton 2.7リストに戻るPython 3.xは反復器オブジェクトを返します.詳細は、Python 3 filter()関数の例:
    # ===========    :===========
    # 1、           
    def is_odd(n):
    	return n % 2 == 1
    		 
    newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
    print(list(newlist))
    #   : [1, 3, 5, 7, 9]
    
    # ===========      :===========
    # 2、   [1, 2, 3]    3         
    newlist = filter(lambda x: x % 3 == 0, [1, 2, 3])
    print(list(newlist))
    #   : [3]
    
  • を参照できます.