我已经阅读了下面的链接,但它并没有解决我的问题。 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]

当前回答

if i > 100:
    x = 2
elif i < 100:
    x = 1
else:
    x = 0

如果你想在一行中使用上述代码,你可以使用以下代码:

x = 2 if i > 100 else 1 if i < 100 else 0

在这样做时,如果i > 100, x将被分配2,如果i < 100, 1,如果i = 100,则为0

其他回答

是的,你可以这样做:

i = int(input('type your num here : '))

x = 2 if i > 100 else ( 1 if i < 100 else 0)
print (x)
MESSAGELENGHT = 39
"A normal function call using if elif and else."
if MESSAGELENGHT == 16:
    Datapacket = "word"
elif MESSAGELENGHT == 8:
     Datapacket = 'byte'
else:
     Datapacket = 'bit'

#similarly for a oneliner expresion:
    

Datapacket = "word" if MESSAGELENGHT == 16 else 'byte' if MESSAGELENGHT == 8 else 'bit'
print(Datapacket)

谢谢

这也取决于你表达的性质。关于“不这样做”的其他答案的一般性建议对于一般的语句和一般的表达是相当有效的。

但如果你所需要的只是一个“分派”表,比如,根据给定选项的值调用不同的函数,你可以把要调用的函数放在字典中。

喜欢的东西:

def save(): 
   ...
def edit():
   ...
options = {"save": save, "edit": edit, "remove": lambda : "Not Implemented"}

option = get_input()
result = options[option]()

而不是if-else:

if option=="save":
    save()
...

不,这是不可能的(至少不是任意的陈述),也不是可取的。将所有内容都放在一行上很可能违反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

你可以选择使用dict的get方法:

x = {i<100: -1, -10<=i<=10: 0, i>100: 1}.get(True, 2)

如果保证其中一个键的值为True,则不需要get方法:

x = {i<0: -1, i==0: 0, i>0: 1}[True]

理想情况下,最多只有一个键值为True。如果有多个键的值为True,则结果似乎不可预测。