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

我已经阅读了下面的链接,但它没有解决我的问题 Python有三元条件运算符吗?(这个问题是关于将if-else语句压缩到一行)

. b 是否有一种更简单的方法来编写if-elif-else语句,使其适合一行?< br / > 例如,< / p >
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]
302844 次浏览

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

只需在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'

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

但如果你所需要的只是一份“快件”;表,例如,根据给定选项的值调用不同的函数,您可以将要调用的函数放在字典中。

喜欢的东西:

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()
...

人们已经提到过三元表达式。有时,以简单的条件赋值为例,可以使用数学表达式来执行条件赋值。这可能不会使您的代码非常易读,但它确实可以在相当短的一行中得到它。你的例子可以这样写:

x = 2*(i>100) | 1*(i<100)

比较将为True或False,当与数字相乘时,则为1或0。可以用+来代替中间的|。

在我看来,还有一种选择是很难读懂的,但我还是要分享一下,只是出于好奇:

x = (i>100 and 2) or (i<100 and 1) or 0

更多信息:https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not

你可以选择使用dictget方法:

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,则结果可能不可预测。

可以使用嵌套的三元if语句。

# if-else ternary construct
country_code = 'USA'
is_USA = True if country_code == 'USA' else False
print('is_USA:', is_USA)


# if-elif-else ternary construct
# Create function to avoid repeating code.
def get_age_category_name(age):
age_category_name = 'Young' if age <= 40 else ('Middle Aged' if age > 40 and age <= 65 else 'Senior')
return age_category_name


print(get_age_category_name(25))
print(get_age_category_name(50))
print(get_age_category_name(75))
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 <如果I = 100,则为100和0

三元运算符是简洁表达式的最佳方式。语法是variable = value_1 if condition else value_2。所以,对于你的例子,你必须应用三元运算符两次:

i = 23 # set any value for i
x = 2 if i > 100 else 1 if i < 100 else 0

尽管有一些其他的答案:

if expression1:
statement1
elif expression2:
statement2
else:
statement3

翻译成以下一行:

statement1 if expression1 else (statement2 if expression2 else statement3)

事实上,你可以嵌套到无穷远。喜欢。)

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)

谢谢

嵌套三元运算符是最好的解决方案——

案例-

4 = 1


3 = 2


2 = 3


1 = 4
a = 4


prio = 4 if a == 1 else (3 if a == 2 else (2 if a == 3 else 1))

是的,你可以这样做:

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


x = 2 if i > 100 else ( 1 if i < 100 else 0)
print (x)