我非常熟悉Python的三元运算符方法:
value = foo if something else bar
我的问题很简单:如果没有事先分配,是否可以从返回操作数之一(
if ...
或... if
)引用(else ...
)中正在评估的术语?
这里的动机是,有时我在
if ...
中使用的表达式正是我想要的三元运算结果;不过,对于较小的表达式,重复它没有问题,但对于较长的表达式,它会有点令人讨厌。以此为例:
value = info.findNext("b") if info.findNext("b") else "Oompa Loompa"
没有办法做到这一点,这是故意的。三元 if 只应该用于简单的情况。
如果您想使用计算结果两次,请将其放入临时变量中:
value = info.findNext("b")
value = value if value else "Oompa Loompa"
一旦你这样做了,很明显你在做一些愚蠢的事情,事实上,写这个的Python方式是:
value = info.findNext("b")
if not value:
value = "Oompa Loompa"
实际上比您最初的尝试少了 5 次击键。 如果您
真的想要保存击键,您可以这样做:
value = info.findNext("b") or "Oompa Loompa"
但是许多风格指南和 BDFL 都不鼓励这样做。
如果您只这样做一次,最好更明确。如果你这样做了六次,那么让
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"
value = bb if (bb := info.findNext("b")) else "Oompa Loompa"
主菜单 值 if .else“公司单独 x ” 信息.查找下一个(“b”) K=r²×m⅖×!¼