把if-elif-else语句放在一行?

2024-05-17 05:42:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经阅读了下面的链接,但它没有解决我的问题。
Does Python have a ternary conditional operator?(问题是将if else语句压缩为一行)

有没有一种更简单的方法来编写if-elif-else语句,使其适合一行?
例如

if expression1:
   statement1
elif expression2:
   statement2
else:
   statement3

[更新]

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]

Tags: 方法if链接have语句operatorelseconditional
3条回答

只需在else语句中嵌套另一个if子句。但这并不能让它看起来更漂亮。

>>> x=5
>>> x if x>0 else ("zero" if x==0 else "invalid value")
5
>>> x = 0
>>> x if x>0 else ("zero" if x==0 else "invalid value")
'zero'
>>> x = -1
>>> x if x>0 else ("zero" if x==0 else "invalid value")
'invalid value'

不,这是不可能的(至少不能用任意的语句),也不可取。将所有内容都放在一行很可能违反PEP-8的规定,即行的长度不得超过80个字符。

这也违背了Python的禅宗:“可读性很重要”。(在Python提示符处键入import this以读取整个内容)。

可以在Python中使用三元表达式,但只能用于表达式,不能用于语句:

>>> a = "Hello" if foo() else "Goodbye"

编辑:

修改后的问题表明,除了赋值之外,这三个语句是相同的。在这种情况下,链式三元运算符确实有效,但我仍然认为它的可读性较差:

>>> i=100
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
0
>>> i=101
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
2
>>> i=99
>>> a = 1 if i<100 else 2 if i>100 else 0
>>> a
1

如果不同情况下只需要不同的表达式,则这可能对您有用:

expr1 if condition1 else expr2 if condition2 else expr

例如:

a = "neg" if b<0 else "pos" if b>0 else "zero"

相关问题 更多 >