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

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

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

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

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

问题例子:

有没有一个简便的写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]


某高票答案:三元操作符

如下为python下的语法:

value_when_true if condition else value_when_false

例子:

'Yes' if fruit == 'Apple' else 'No' # 判断“苹果”是否是水果,如果结果是True,返回“Yes”,如果是False则“No”。

原文链接:https://stackoverflow.com/questions/2802726/putting-a-simple-if-then-else-statement-on-one-line


另附注这个回答以供参考:答主觉得这样其实不符合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

原文链接:https://stackoverflow.com/questions/14029245/putting-an-if-elif-else-statement-on-one-line#


阅读更多
想对作者说点什么? 我来说一句

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

关闭
关闭
关闭