私はPythonの三項演算子アプローチに精通しています:
value = foo if something else bar
私の質問は非常に簡単です。事前の割り当てなしで、とにかく評価されている用語を参照することがあります(if ...
)戻りオペランドの1つ(... if
またはelse ...
)?
ここでの動機は、時々if ...
それはまさに、三項演算の結果として欲しいものです。ただし、小さな式の場合は問題なく繰り返すことができますが、少し長い式の場合はやや厄介です。これを例に取ります:
value = info.findNext("b") if info.findNext("b") else "Oompa Loompa"
これを行う方法はありません。それは意図的なものです。三項ifは、些細な場合にのみ使用されることになっています。
計算の結果を2回使用する場合は、一時変数に入れます。
value = info.findNext("b")
value = value if value else "Oompa Loompa"
これを行うと、愚かなことをしていることが明らかになります。実際、これを記述するPythonの方法は次のとおりです。
value = info.findNext("b")
if not value:
value = "Oompa Loompa"
そして、それは実際に5回ですfewerあなたの最初の試みよりもキーストローク。
本当にキーストロークを保存したい場合、代わりにこれを行うことができます:
value = info.findNext("b") or "Oompa Loompa"
しかし、それは多くのスタイルガイドやBDFLによって推奨されていません。
これを1回だけ行う場合は、より明示的にする方が適切です。あなたがそれを半ダース回やっているなら、findNext
がオプションのデフォルトを取り、None
の代わりに返すようにすることは、すべての組み込みおよびstdlibのように、些細なことです。関数:
def findNext(self, needle, defvalue=None):
# same code as before, but instead of return None or falling off the end,
# just return defvalue.
次に、これを行うことができます:
value = info.findNext("b", "Oompa Loompa")
if ... else
を使用しないでください。代わりに、Pythonの合体演算子を利用してください。
value = info.findNext("b") or "Oompa Loompa"