1

a をブール値 に評価する条件があり、その条件に応じてcondition変数を値に設定したいとします。foo

some_valueいくつかの異なる方法で書くことができます (簡単にするために、とsome_other_valueは定数であり、関数呼び出しではないと仮定します)。方法は次のとおりです。

foo = None
if condition:
  foo = some_value
else:
  foo = some_other_value

このアプローチはfoo、上部で明確に宣言されているため、優れています。ただし、少し冗長です。より簡単に次のように書くことができます。

if condition:
  foo = some_value
else:
  foo = some_other_value

これにより代入を省くことができますが、一部のプログラマーはfooのスコープの正確な性質が不明であることに気付く可能性があります。

別の方法は次のとおりです。

foo = some_other_value
if condition:
  foo = some_value

これはより簡潔で、ブランチを節約できます。ただし、コードをすばやく読んでいる人にとっては誤解を招く可能性があります。

これらの方法の 1 つは、スタイルや実行速度に適していますか? (ここではパフォーマンスの向上は最小限であると思いますが、null ではない場合) または、このコードを記述する別の 4 番目の方法が推奨されますか?

4

4 に答える 4

3

foo = some_value if condition else some_other_value

于 2013-10-31T00:10:28.220 に答える
0

Pythonには三項演算子があります

foo = ifTrue if predicate else ifFalse

predicate はブール値の式です。例えば

def abs(x):
    return x if x > 0 else -x

コンパクトで経済的で、わかりやすいです。述語が複雑な場合は、括弧を使用するように注意してください。

于 2013-10-31T00:12:37.867 に答える
0

それだけの価値があるため、私は三項演算子を好みます。

foo = baz if quux() else bar

しかし、どちらか一方を優先するパフォーマンス上の理由はありますか? いいえ

In [15]: %timeit foo = 2 if random.randint(0,1) else 3
100000 loops, best of 3: 1.69 µs per loop

In [16]: %%timeit
   ....: if random.randint(0,1):
   ....:     foo = 2
   ....: else:
   ....:     foo = 3
   ....:
100000 loops, best of 3: 1.6 µs per loop

In [17]: %%timeit foo = 0
if random.randint(0,1):
    foo = 2
else:
    foo = 3
   ....:
1000000 loops, best of 3: 1.59 µs per loop
于 2013-10-31T00:16:14.400 に答える