6

関数の実行時に設定する必要があるデフォルトの引数を持つ関数 (空のリスト、他の引数から派生した値、データベースから取得したデータなど) が必要であり、現在これに対処するために次のパターンを使用しています。

def foo(bar, baz=None):
    baz = baz if baz else blar()
    # Stuff

Whereは、実行中に変更される可能性blar()のある適切なデフォルト値を示します。bazしかし、そのbaz = baz if baz else ...線はエレガントではないように私には思えます。デフォルトの関数引数の1回限りのバインディングを回避するより良い方法を他の誰かが持っていますか? pip によってインストール可能な小さなクロスプラットフォーム ライブラリは、受け入れ可能な代替品です。

4

4 に答える 4

11

いいえ、それだけです。通常、またはなどis Noneの偽の値を安全に渡すことができるようにテストします。0""

def foo(bar, baz=None):
    baz = baz if baz is not None else blar()

昔ながらの方法は 2 ライナーです。こっちの方が好きな人もいるだろう

def foo(bar, baz=None):
    if baz is None:
        baz = blar()
于 2013-06-06T11:04:45.890 に答える
6

交換できます

baz = baz if baz else blar()

baz = baz or blar()

の代わりに偽の値をテストするだけで満足している場合None

于 2015-02-06T11:54:47.830 に答える