Python有Elvis运算符吗?

时间:2018-02-15 17:31:36

标签: python conditional-operator

许多语言的三元运算符都是这样的:

x = f() ? f() : g()

如果f()是真实的,则为x分配f()的值,否则为其分配值g()。但是,某些语言的功能更为简洁elvis operator

x = f() ?: g()

在python中,三元运算符表示如下:

x = f() if f() else g()

但是python是否有更简洁的 elvis 运算符?

可能是这样的:

x = f() else g() # Not actually valid python

3 个答案:

答案 0 :(得分:18)

Python确实有elvis运算符。它是条件or运算符:

x = f() or g()
评估

f()。如果真实,则为x指定值f(),否则为x指定值g()

参考:https://en.wikipedia.org/wiki/Elvis_operator#Analogous_use_of_the_OR_operator

答案 1 :(得分:4)

注意 Python 没有没有空合并操作符定义为:

a if a is not None else b

or 中的 a or b 运算符在 aFalse 或其他类似情况下检查 a==0 的真实性,即 len(a)==0。见What is Truthy and Falsy

有建议添加这样的操作符 PEP 505

答案 2 :(得分:-1)

>>> a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4]
>>> a + (b,c)[b>c]
[1, 2, 3, 4]
>>> a + (b,c)[b<c]
[1, 2, 3, 4, 5, 6]
>>> 

Python Elvis操作是

(testIsFalse, testIsTrue)[test]

与Java等效的是

test ? testIsTrue:testIsFalse