python if else写在一行_关于python:将if-elif-else语句放在一行上?

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

python是否有三元条件运算符?(问题是将if else语句压缩为一行)

写if-elif-else语句是否有一种更简单的方法,使它适合一行?< BR>例如,

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]

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

@阿斯特拉沃尔夫:是的,表达方式是说2 if i>100…

嗯,我读到了,因为if i>100 else 0现在不可能得到它。

@阿斯特拉沃尔夫:非常感谢!这很好地说明了我试图表达的观点——一个链接的三元表达式是可能的,但可读性较差,显然容易被误解。

如果你需要它更可读,你可以在它周围加上括号,比如:a = 1 if i < 100 else (2 if i > 100 else 0)(未经测试,但我认为它应该可以工作)

@Timpietzcker你如何描述表达和陈述之间的区别?

stackoverflow.com/a/4728147/20670怎么样?

如果对于不同的情况只需要不同的表达式,那么这可能适用于您:

expr1 if condition1 else expr2 if condition2 else expr

例如:

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

"pos"不是一个语句,它是一个表达式。

@Timpietzcker感谢,我更新了帖子以使其更准确。

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

对我来说,这比公认的答案更具可读性,因为它保持了第一句的结构和概念;只是主观的问题。

您可以选择实际使用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进行评估,结果可能看起来不可预测。

在我看来,还有一种选择是不可读的,但我还是会把它作为一种好奇心来分享:

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

这里有更多信息:https://docs.python.org/3/library/stdtypes.html布尔运算与否

这看起来像规范的javascript;-)

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,x将被分配为1;如果i=100,x将被分配为0。

People have already mentioned ternary expressions. Sometimes with a simple conditional assignment as your example, it is possible to use a mathematical expression to perform the conditional assignment. This may not make your code very readable, but it does get it on one fairly short line. Your example could be written like this:

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

比较将是对的或错的,当与数字相乘时,将是1或0。可以用一个+代替中间的一个。

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

但是,如果您只需要一个"dispacth"表,比如根据给定选项的值调用不同的函数,那么您可以将要调用的函数放在字典中。

类似:

def save():

...

def edit():

...

options = {"save": save,"edit": edit,"remove": lambda :"Not Implemented


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

[cc lang="python"]# 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))

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值