是否有运算符或库函数这样v ??? d
- 评估为vifv不同于None且不评估d, 或
- 计算为difv等于None。
(其中???我表示我正在寻找的运营商)。
运算符or几乎是我想要的,但它的计算结果为默认值 if vis 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,则返回。否则,第二个将被评估(并且仅在这种情况下),它将是表达式的结果。