0

これの慣用的な形式は何ですか:

foo = <something complicated>
if foo is None : foo = foo_default

foo = <something complicated> or foo_defaultの 0 の結果<something complicated>が に置き換えられるため、使用できませんfoo_default

4

4 に答える 4

2

あなたが現在持っているのは慣用的なものです。このロジックを 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

于 2013-11-06T16:16:08.527 に答える
2

を探してい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

于 2013-11-06T16:15:41.117 に答える
2

条件式を使用します:

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_exprtrue_expr) 。false_exprtest_expr

これにより、存在しないメソッドを呼び出す前に特定の前提条件をテストできます。次に例を示します。

foo = foo(some, argument) if foo is not None else 'default value'

複雑な式を 2 回呼び出さずにテストして代入することはできません。それでも 2 つのステートメントを使用する必要があり、それを回避する方法はありません。

于 2013-11-06T16:15:50.843 に答える