1. ホーム
  2. python

[解決済み] ラムダはどのように役立つのですか?[クローズド]

2022-03-23 19:02:16

質問

Pythonのラムダを理解しようとしているのですが、どうすればいいですか?それは lambda は、実際の生活では忘れてしまうような、興味深い言語項目の1つなのでしょうか?

しかし、その不明瞭さ、将来のリリースで再定義される可能性(さまざまな定義に基づく私の推測)、コーディングの明快さの低下を考えると、避けるべきなのでしょうか。

これは、C言語の型のオーバーフロー(バッファオーバーフロー)を思い出させる - トップの変数を指して、他のフィールドの値を設定するためにオーバーロードすること。 これは、技術的な見せかけのようで、メンテナンスのためのコーダーの悪夢のようなものです。

どうすればいい?

について話しているのですか? ラムダ式 ? のように

lambda x: x**2 + 2*x - 5

そういうのって、実は結構便利なんですよ。 Pythonは次のようなプログラミングのスタイルをサポートしています。 関数型プログラミング ここでは、関数を他の関数に渡して何かをさせることができます。例を挙げます。

mult3 = filter(lambda x: x % 3 == 0, [1, 2, 3, 4, 5, 6, 7, 8, 9])

セット mult3 から [3, 6, 9] のように,元のリストの要素のうち,3の倍数であるものを削除します.

def filterfunc(x):
    return x % 3 == 0
mult3 = filter(filterfunc, [1, 2, 3, 4, 5, 6, 7, 8, 9])

もちろん、この特殊なケースでは、リスト内包と同じことをすることもできます。

mult3 = [x for x in [1, 2, 3, 4, 5, 6, 7, 8, 9] if x % 3 == 0]

(として(あるいは range(3,10,3) しかし、リスト内包が使えない、ラムダ関数が最短距離で書き出せるような、より高度なユースケースは他にもたくさんあります。

  • 他の関数から関数を返す

      >>> def transform(n):
      ...     return lambda x: x + n
      ...
      >>> f = transform(3)
      >>> f(4)
      7
    
    

    これは、Pythonのデコレータのような関数ラッパーを作成するためによく使用されます。

  • 反復可能なシーケンスの要素を組み合わせて reduce()

      >>> reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])
      '1, 2, 3, 4, 5, 6, 7, 8, 9'
    
    
  • 代替キーによるソート

      >>> sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))
      [5, 4, 6, 3, 7, 2, 8, 1, 9]
    
    

私は普段からラムダ関数を使っています。慣れるまでは時間がかかりましたが、最終的には、この言語の非常に貴重な部分であることを理解するようになりました。