[解決済み] ラムダ関数とネストされた関数('def')のどちらを使うのがより好ましいか?
質問
私は主にラムダ関数を使用していますが、同じ動作を提供するように見えるネストされた関数を使用することもあります。
ここでは、どちらかが別の関数の中で見つかった場合、機能的に同じことを行ういくつかの些細な例を紹介します。
ラムダ関数
>>> a = lambda x : 1 + x
>>> a(5)
6
ネストされた関数
>>> def b(x): return 1 + x
>>> b(5)
6
どちらか一方を使うことに利点はありますか?(パフォーマンス? 読みやすさ? 制限? 一貫性?など)
それは重要ですか?もしそうでないなら、それはPythonicの原則に違反しますか。
どのように解決するのですか?
を割り当てる必要がある場合
lambda
を名前に割り当てる必要がある場合は
def
の代わりに
def
は代入のための単なる構文上の糖なので、結果は同じで、より柔軟で読みやすくなっています。
lambda
は
一回使って、捨てる
関数に使うことができます。
しかし、このような使用例は非常に稀です。名前のない関数オブジェクトを渡す必要があることはほとんどありません。
組み込みの
map()
と
filter()
は関数オブジェクトを必要としますが
リスト内包
と
ジェネレータ式
は一般にこれらの関数よりも読みやすく、ラムダを使わずにすべてのユースケースをカバーすることができます。
本当に小さな関数オブジェクトが必要なケースでは
operator
モジュール関数のように
operator.add
の代わりに
lambda x, y: x + y
もし、まだいくつかの
lambda
が必要な場合は
def
を書くことを考えるかもしれません。もし、関数が
operator
モジュールのものよりも複雑な場合は
def
の方がいいかもしれません。
だから、現実の良い
lambda
の使用例は非常に稀です。
関連
-
[解決済み] Java 8でラムダをパラメータとして受け取るメソッドを定義するにはどうすればよいですか?
-
[解決済み] lambdaを使うべきか、Proc.newを使うべきか?
-
[解決済み】C#のラムダ式。なぜ私はそれらを使用する必要がありますか?
-
[解決済み】E731 ラムダ式を代入せず、defを使用する。
-
[解決済み】ラムダ関数はテンプレート化できる?
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] Pythonでマルチプロセッシングキューを使うには?
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Pythonの検索パスを他のソースに展開する
-
[解決済み] あるメソッドが複数の引数のうち1つの引数で呼び出されたことを保証する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PILからopenCVフォーマットへの変換
-
[解決済み] Pythonでコード行間にかかる時間を測定するには?
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] if 節の終了方法
-
[解決済み] PythonのRequestsモジュールを使ってWebサイトに "ログイン "するには?