私が見つけたもの:
Dive in to Python では、and
and演算子の特異な性質とor
、ブール演算子の短絡評価を使用して、C の三項演算子と非常によく似た機能のand-or トリックを介して条件をより簡潔に表現する方法について読みました。
子:
result = condition ? a : b
パイソン:
result = condition and a or b
Python ではラムダ関数がワンライナーに制限されているため、これは便利なようですが、論理構文を使用して制御フローを表現します。
Python 2.5 以降、inline-if
が and-or トリックのより読みやすい構文として助けになったようです。
result = a if condition else b
したがって、これは読みにくいand-or-constructのpythonicの代替品であると思います。複数の条件をネストしたい場合でも、非常に包括的に見えます。
result = a if condition1 else b if condition2 else c
しかし、不確実性の世界では、 abc にアクセスするために次のようなコードを書いていることがよくあります。
result = a and hasattr(a, 'b') and hasattr(a.b, 'c') and a.b.c or None
したがって、inline-ifの助けを借りて、おそらくいくつかのandsとorsを取り除くことができ、非常に読みやすいコードが得られます。
result = a.b.c if hasattr(a, 'b') and hasattr(a.b, 'c') else None
私はまた、このレシピで条件付きのやや難解なアプローチを発見しました
result = (a, b)[condition]
ただし、これはショートサーキットではなく、条件の結果がブール値の 0 または 1 を返さない場合、あらゆる種類のエラーが発生します。
知りたいこと:
今、インラインを使用することが望ましい/よりpythonicであると考えられるかどうか疑問に思います-if
下位互換性が問題にならない場合、またはすべてが好みの問題であり、短絡の世界でどれだけ家にいると感じるか評価?
アップデート
inline-if は and-or-trick のシンタックス シュガー以上のものであることに気付きました。これa
は、ブール値のコンテキストで が false の場合に失敗しないためです。したがって、おそらくより失敗しないでしょう。