小编典典

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

all

有没有更简单的方法来编写 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]

阅读 104

收藏
2022-07-13

共1个答案

小编典典

不,这是不可能的(至少不是任意陈述),也不是可取的。将所有内容放在一行很可能违反PEP-8,其中规定行的长度不应超过
80 个字符。

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

可以 在 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
2022-07-13