我已阅读下面的链接,但它没有解决我的问题 .
Does Python have a ternary conditional operator?(问题是关于将if-else语句压缩到一行)
有没有更简单的方法来编写if-elif-else语句,以便它适合一行?
例如,
if expression1:
statement1
elif expression2:
statement2
else:
statement3
[UPDATE]
if i>100:
x=2
elif i<100:
x=1
else:
x=0
我只是觉得如果上面的例子可以用以下方式编写,它看起来可能更简洁 .
x=2 if i>100 elif i<100 1 else 0 [WRONG]
8 回答
不,这是不可能的(至少不是任意陈述),也不可取 . 在一行上拟合所有内容很可能违反PEP-8,其中强制行的长度不应超过80个字符 .
它也反对Python的禅宗:"Readability counts" . (在Python提示符下键入
import this
以阅读整个内容) .您可以在Python中使用三元表达式,但仅用于表达式,而不用于语句:
Edit:
您修改后的问题现在表明除了分配的值之外,这三个语句是相同的 . 在这种情况下,链式三元运算符确实有效,但我仍然认为它的可读性较差:
如果您只需要针对不同情况的不同表达式,那么这可能对您有用:
例如:
只需在else语句中嵌套另一个if子句 . 但这并不会让它看起来更漂亮 .
在我看来,有一个替代方案是非常难以理解的,但无论如何我都会分享好奇心:
更多信息:https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not
好吧,几个月前我遇到过类似的问题,然后有一天我意识到你实际上可以利用
dict
对象的get
方法 .基本上
i>100
和i<100
不能都是真的,所以如果它们中的任何一个是True
你得到你想要的值(2或1),如果它们都不是True
,你得到0
.它还取决于你的表达的性质 . 关于“不做”的其他答案的一般建议对于泛型语句和泛型表达式非常有效 .
但是如果您只需要一个“dispacth”表,比如根据给定选项的值调用不同的函数,则可以将函数放在字典中调用 .
就像是:
(而不是
)
人们已经提到过三元表达 . 有时使用简单的条件赋值作为示例,可以使用数学表达式来执行条件赋值 . 这可能不会使您的代码具有可读性,但它确实可以在相当短的时间内完成 . 您的示例可以这样写:
比较将为True或False,并且当与数字相乘时则为1或0.可以使用a而不是|在中间 .
您可以使用嵌套的三元if语句 .