1. ホーム
  2. パイソン

[解決済み】E731 ラムダ式を代入せず、defを使用する。

2022-04-05 01:53:04

質問

ラムダ式を使用するとpep8の警告が出ます。ラムダ式は推奨されないのでしょうか?もしそうでなければ、なぜですか?

解決方法は?

での推奨事項は PEP-8 にぶつかっているのは

という代入文の代わりに、必ずdef文を使用します。 は、ラムダ式を直接名前にバインドします。

はい。

def f(x): return 2*x 

いいえ。

f = lambda x: 2*x 

最初の形式は、結果として得られる 関数オブジェクトは、一般的な '<lambda>' ではなく、特別に 'f' となります。 これは、トレースバックや文字列表現においてより有用です。 一般的に 代入文の使用で、唯一の欠点である ラムダ式が明示的なdef文より優れている点 (より大きな式の中に埋め込むことができる)。

ラムダを名前に割り当てることは、基本的に、以下の機能を重複させるだけです。 def - 一般に、混乱を避け、明瞭性を高めるためには、何かを一つの方法で行うのが最善です。

ラムダの正当な使用例は、関数を代入せずに使いたい場合などです。

sorted(players, key=lambda player: player.rank)

一般的に、これを行うことに対する主な議論は、以下の通りです。 def ステートメントを使用すると、コードの行数が増えます。それに対する私の主な回答は、「そうだ、それでいいんだ」です。コードゴルフをするのでなければ、行数を少なくすることは、やるべきことではありません。