ラムダ式を使用するたびに、この pep8 警告が表示されます。ラムダ式は推奨されないのでしょうか? そうでない場合、その理由は何ですか?
ベストアンサー1
の推奨事項ペップ8遭遇している問題は次のとおりです:
ラムダ式を名前に直接バインドする代入ステートメントの代わりに、常に def ステートメントを使用します。
はい:
def f(x): return 2*x
いいえ:
f = lambda x: 2*x
最初の形式は、結果の関数オブジェクトの名前が一般的な '<lambda>' ではなく具体的に 'f' であることを意味します。これは、トレースバックや文字列表現全般に役立ちます。代入文を使用すると、ラムダ式が明示的な def 文よりも提供できる唯一の利点 (つまり、より大きな式の中に埋め込むことができる) がなくなります。
ラムダを名前に割り当てると、基本的に機能が重複するだけなのでdef
、一般的に、混乱を避けて明確さを高めるには、単一の方法で何かを行うのが最善です。
lambda の正当な使用例は、関数を割り当てずに使用したい場合です。例:
sorted(players, key=lambda player: player.rank)
一般的に、これを行うことに対する主な反対意見は、def
ステートメントによってコード行数が増えるというものです。それに対する私の主な回答は、「はい、それは問題ありません」です。コード ゴルフをしているのでない限り、行数を最小限に抑えることはすべきではありません。短くするよりも明確にしてください。