翻译 python:能否把 if-elif-else写成一行的形式?

从来都是“if”、换行后“elif”、换行后“else”,不明白的是把 if-else写在一行是什么操作?

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


Question:

statement/语句if-elif-else如下:

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

我个人觉得下边的代码更简洁。为什么教程上不用简洁版本的呢?

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

 

+++++++++++Answer1+++++++++++

此谓三元操作符的应用,python下的三元操作语法如下:

value_when_true if condition else value_when_false

举个(伪代码)栗子:

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

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

 

+++++++++++Answer2+++++++++++

—— 该问题的答主觉得是因为它不符合python之禅的精神,即“代码的可读性”:

“一方面,严格来说,这么写是不可以,也是不可取的。把所有的东西写在一行几乎就是在违反PER-8的书写规则:规定一行代码最长不能超过80个字符。”

“另一方面,这么写也违反了Python之禅:‘可读性为王’。在Python里你可以用三元的表达式/expression,但仅限于此,它不适用于声明/statement。表达式例子:

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

从你提的问题里可以看出,除了赋了的i之外,下面的三个声明(statement)是一致的。虽然这些三元操作符是能运行的,但是我的观点还是可读性不足。

# jupyter notebook显示风格
>>> i=100
>>> a = 1 if i<100 elif 2 if i>100 else 0
>>> a
0
>>> i=101
>>> a = 1 if i<100 elif 2 if i>100 else 0
>>> a
2
>>> i=99
>>> a = 1 if i<100 elif 2 if i>100 else 0
>>> a
1

# 需要注意的是上边的代码是jupyter风格的,多谢weixin_41505223和lycommand (if elif else是规范的写法。我之前的if else else 可以运行,但是不规范,或者说是错误的)。

现在补充一下Python 自带IDE,或者Pycharm的代码:

i=100
a = 1 if i<100 elif 2 if i>100 else 0
print(a)
# 输出:0


i=101
a = 1 if i<100 elif 2 if i>100 else 0
print(a)
# 输出:2


i=99
a = 1 if i<100 elif 2 if i>100 else 0
print(a)
# 输出:1

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


2018-12更新:

上边的代码,有N个i就需要写N遍“a = 1 if i<100 else 2 if i>100 else 0 print(a)”。有没有感觉麻烦呢?

1) 其实可以只写一遍:

h = input('请输入数字:')  # 运行之后,请在输出窗口手工输入相应的数字。注意:a的格式是str
i = float(h)             # 将输入的str格式地数字,转换为float格式,之后才能进行大小运算
a = 1 if i<100 elif 2 if i>100 else 0
print(a)

这样一来,就能通过运行N次模块,输入N次i。

2)如果你觉得还是太麻烦,不想一遍一遍地点击“run”运行模块怎么办呢?

可是可以的。思路是这样,把上边这一堆打包并且起个名字比如“xunhuan()”,然后循环喊它来干活就OK了。代码如下:

def xunhuan(): # 就喊打包代码为“xunhuan()”,为了可读性,我们统一在名字前面添加 def,下边的代码每行空4格。so它就清晰易读啦。
    h = input('请输入数字:') 
    i = float(h)            
    a = 1 if i<100 elif 2 if i>100 else 0
    print(a)
    xunhuan()  # 我疯起来连自己都敢打(调用自己)

xunhuan()  # 如果有不止1个打包好的代码,python需要我们告诉它立即执行的是哪一个。

——这也就是python的“函数”啦。

其实,出去#内容,并且“规范一点儿”的话,应该是这种的:

def xunhuan():
    h = input('请输入数字:') 
    i = float(h)            
    a = 1 if i<100 elif 2 if i>100 else 0
    print(a)
    xunhuan()

if __name__ == '__main__':
    xunhuan() 

如果想知道"if __name__ == '__main__':"什么鬼,可以参考下我的这篇笔记:if __name__ == "__main__":应该怎么样理解呢?

欢迎交流讨论。^.^

 

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

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试