1. ホーム
  2. python

[解決済み] ラムダ関数とネストされた関数('def')のどちらを使うのがより好ましいか?

2022-09-07 05:24:52

質問

私は主にラムダ関数を使用していますが、同じ動作を提供するように見えるネストされた関数を使用することもあります。

ここでは、どちらかが別の関数の中で見つかった場合、機能的に同じことを行ういくつかの些細な例を紹介します。

ラムダ関数

>>> a = lambda x : 1 + x
>>> a(5)
6

ネストされた関数

>>> def b(x): return 1 + x

>>> b(5)
6

どちらか一方を使うことに利点はありますか?(パフォーマンス? 読みやすさ? 制限? 一貫性?など)

それは重要ですか?もしそうでないなら、それはPythonicの原則に違反しますか。

それを行うための明白な方法が1つ、できれば1つだけあるべきです。 .

どのように解決するのですか?

を割り当てる必要がある場合 lambda を名前に割り当てる必要がある場合は def の代わりに def は代入のための単なる構文上の糖なので、結果は同じで、より柔軟で読みやすくなっています。

lambda 一回使って、捨てる 関数に使うことができます。

しかし、このような使用例は非常に稀です。名前のない関数オブジェクトを渡す必要があることはほとんどありません。

組み込みの map()filter() は関数オブジェクトを必要としますが リスト内包 ジェネレータ式 は一般にこれらの関数よりも読みやすく、ラムダを使わずにすべてのユースケースをカバーすることができます。

本当に小さな関数オブジェクトが必要なケースでは operator モジュール関数のように operator.add の代わりに lambda x, y: x + y

もし、まだいくつかの lambda が必要な場合は def を書くことを考えるかもしれません。もし、関数が operator モジュールのものよりも複雑な場合は def の方がいいかもしれません。

だから、現実の良い lambda の使用例は非常に稀です。