是否有运算符或库函数这样v ??? d
- 评估为
v
ifv
不同于None
且不评估d
, 或 - 计算为
d
ifv
等于None
。
(其中???
我表示我正在寻找的运营商)。
运算符or
几乎是我想要的,但它的计算结果为默认值 if v
is False
。仅当参数为 时,我才需要默认值None
,因此False ??? d
计算结果为False
。
更新:为了澄清,在我的情况下v
可以是一个复杂的表达式,比如computeSomethingLong() ??? d
. 所以我不能使用
computeSomethingLong() if computeSomethingLong() is not None else d
我必须做类似的事情
tempvar = computeSomethingLong()
tempvar if tempvar is not None else d
相比之下,感觉很尴尬computeSomethingLong() or d
。
更新:我得到的最接近的是定义我自己的函数:
def orElse(v, deflt):
if v is not None:
v
else:
deflt
但缺点是deflt
总是被评估!我希望它仅在实际需要时进行评估。特别是,我希望在
firstLongComputation() ??? secondLongComputation()
评估第一个计算;如果结果不是None
,则返回。否则,第二个将被评估(并且仅在这种情况下),它将是表达式的结果。