能否把 if-elif-else写成一行的形式?

能否把 if-elif-else写成一行的形式?

 

练习“七段数码管”是看见把 if-else写在一行的代码。

问题是:自己写的时候,从来都是“if”放在开头,换行写“elif”或者“else”的。把 if-else写在一行是什么操作?

A:百度没找到相应的答案,还好在stackoverflow找到了一个相应的问答,特翻译如下:

 

 

Question:

“有没有一个简便的写if-elif-else statement,就像这个例子写在一行 ?

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]

 

Answer:此谓三元操作符的应用

“python下的三元操作语法如下:

value_when_true if condition else value_when_false

“举个栗子:

'Yes' if fruit == 'Apple' else 'No'

# 判断‘苹果’是否是水果,如果结果是True,返回‘Yes’,如果是False则‘No’。”

原stackoverflow英文问答,请点击此处。

 

 

另附注另一个回答以供参考

—— 该问题的答主觉得这样其实不符合python之禅的“可读性”:

“这么写是不可以(严格来说),也是不可取的。把所有的都写在一行差不多就是在违反PER-8书写规则,因为它规定一行代码最长不能超过80个字符。”

“这么写也违反了Python之禅:‘可读性为王’。在Python里你可以用一个三元的表达式(expression),但仅限与表达式,不适用于声明(statement)

>>> a = "Hello" if foo() else "Goodbye"

Edit:

“从你提的问题里可以看出,除了赋值了的值外三个声明(statement)是一致的。这种情况下,一行上的三元操作符是能运行的,即使这样我还是认为可读性略差

>>> 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

原stackoverflow英文答案,请点击此处。

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页