E731 ラムダ式を代入しないで、def を使用してください。質問する

E731 ラムダ式を代入しないで、def を使用してください。質問する

ラムダ式を使用するたびに、この 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ステートメントによってコード行数が増えるというものです。それに対する私の主な回答は、「はい、それは問題ありません」です。コード ゴルフをしているのでない限り、行数を最小限に抑えることはすべきではありません。短くするよりも明確にしてください。

おすすめ記事