python中学校(八)匿名関数lambdaの使い方

2293 ワード

匿名関数は、その名の通り名前のない関数であり、defで定義された関数との最大の違いは、匿名関数が作成された後に関数自体(すなわち、匿名関数はreturnを必要とせずに値を返す)を返すことであり、式自体の結果は戻り値であり、defが作成された後に変数名を付与し、Pythonではキーワードlambdaを利用して匿名関数を作成し、匿名関数lambda式の形式は次のとおりです.
  lambda arg1,arg2,.....argn:expression
以下にlambdaの特徴を示します.
  • lambdaは、文ではなく式です.つまり、式を使用できるシーンのようにlambdaを使用することができます.
  • lambdaの主体も式であり、def定義の関数と同様にlambdaにも関数主体があるが、lambdaの主体は1つの式にすぎないため、その使用機能は大きく制限されている.

  • 余談はさておき、本題に戻ると、やはり栗が来たほうがお得です.
    匿名関数の使用:
     1 #python3
     2 
     3 test1 = lambda :True
     4 #
     5 print(test1())
     6 
     7 test2 = lambda x: x + 1
     8 print(test2(2))
     9 
    10 test3 = (lambda x, y: x + y)(3,4)
    11 #
    12 print(test3)

    テスト結果:
    True
    3
    7

    プロジェクト実戦:
    最近、関数を実行中にエラーが発生しました.
    t.timeout.connect(self.updateData())TypeError: argument 1 has unexpected type 'NoneType'
    修正結果:
     t.timeout.connect(lambda:self.updateData())
    はい、原因は何ですか.
    個人的には、connect接続は戻り値でありselfであるため、匿名関数を用いることができるのは、この2つが異なる関数であるためである.updateData()は関数の戻り値を返します.値がないので、このエラーが報告されます.
    ここにはもう一つの解決策があります.このように書いてもいいです.
    t.timeout.connect(self.updateData)