Does Python have ternary conditional with elif?
我最近发现了这个问题:python有三元条件运算符吗?并发现一种叫做三元条件a = b if c == d else e的东西。
我的问题:有一种方法可以用elif使三元条件化?有点像a = b if c == d elif e == f i else j。
- 你可以嵌套三元,是的,但是为什么?
- 'a' if 1 == 2 else 'b' if 2 == 3 else 'c'
- 某种程度上。可以嵌套三元语句。但一旦你说到这一点,我认为可读性超过了便利性,我只使用一个常规的if语句。
- 正如你自己写的,它是一个三元运算符,有三个操作数。一个elif将引入另外两个。
- @ KlausD。好的,谢谢。
您可以链接条件运算符,但不建议这样做,因为它很难读取。关联性按您期望的方式工作(就像除了PHP以外的所有语言):
1
| a = b if c == d else i if e == f else j |
这意味着在英语中,"如果c等于d,将b赋给a,否则,如果e等于f,则将i赋给f,如果不等于f,则将j赋给i。"
1
| 'Yes' if test1() else 'Maybe' if test2() else 'No' |
另外,要小心,你可能是指检查是否相等的a==b,而不是指分配的a=b!
- 什么是test1()和test2()?
- 返回真或假值的任何函数或表达式。
- @恩德罗克:它们只是例子。您可以用您的测试来替换它们;例如,a == b或e == f。
- 是的,就像Zondo说的。一般来说,除非您的测试非常简单(如a==b),否则最好选择适当命名、可读的函数,使代码像英语一样阅读。
- 此外,重要的是要认识到"三元运算符"(即return_value1 if test1 else return_value2 if test2 else return_value3和正常的if ... else块之间的区别,后者根据测试执行操作,但本身不返回任何内容。
您可以嵌套三元:
1
| a = b if c == d else (i if e == f else j) |
我想不出任何一种语言有一个具有elseif语法的三元运算符。"三元"这个名字意味着操作者只有三个部分:条件,然后,和其他。