将if-elif-else语句放在一行上?

24 浏览
0 Comments

将if-elif-else语句放在一行上?

我已经阅读了下面的链接,但它没有解决我的问题。

Python 是否有三元条件运算符?(该问题是关于将 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]

admin 更改状态以发布 2023年5月24日
0
0 Comments

如果你只需要在不同情况下使用不同的表达式,那么这个方法可能适合你:

expr1 if condition1 else expr2 if condition2 else expr

例如:

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

0
0 Comments

不,这是不可能的(至少不是使用任意语句),也不是可取的。把所有内容都放在一行上可能会违反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

0