これの慣用的な形式は何ですか:
foo = <something complicated>
if foo is None : foo = foo_default
foo = <something complicated> or foo_default
の 0 の結果<something complicated>
が に置き換えられるため、使用できませんfoo_default
。
これの慣用的な形式は何ですか:
foo = <something complicated>
if foo is None : foo = foo_default
foo = <something complicated> or foo_default
の 0 の結果<something complicated>
が に置き換えられるため、使用できませんfoo_default
。
あなたが現在持っているのは慣用的なものです。このロジックを 1 行にまとめる良い方法はありません。
もちろん、このパターンを頻繁に使用する場合は、これを関数でラップできます。
編集:他の回答との比較として、次の2つのコードを検討してください:
OPの現在のバージョン:
foo = <something complicated>
if foo is None: foo = foo_default
条件式を示唆する回答:
foo = <something complicated>
foo = foo_default if foo is None else foo
に評価される可能性のある条件式を使用することfoo = foo
は、 one-line を使用するよりも明確ではありませんif foo is None: foo = foo_default
。
を探していconditional expression
ます。(ここでは三項演算子の形式で)
>>> foo = bar if baz else qux
または、データを使用して:
>>> foo = <something complicated>
>>> foo = foo_default if foo is None else foo
例:
>>> foo = "A value"
>>> foo = foo if foo else "Nothing!"
>>> foo
'A value'
>>> foo = False
>>> foo = foo if foo else "Nothing!"
>>> foo
'Nothing!'
ただし、この場合の「複雑なもの」は関数を意味するように思われるため、そうでない場合は関数でfoo_default
返されるだけであることをお勧めしますNone
条件式を使用します:
foo = foo if foo is not None else foo_default
または反転:
foo = foo_default if foo is None else foo
と同様or
に、すべての式が評価されるわけではありません。の結果に応じて、 または が完全に無視されます (実行されませtrue_expr if test_expr else false_expr
んtrue_expr
) 。false_expr
test_expr
これにより、存在しないメソッドを呼び出す前に特定の前提条件をテストできます。次に例を示します。
foo = foo(some, argument) if foo is not None else 'default value'
複雑な式を 2 回呼び出さずにテストして代入することはできません。それでも 2 つのステートメントを使用する必要があり、それを回避する方法はありません。