从来都是“if”、换行后“elif”、换行后“else”,不明白的是把 if-else写在一行是什么操作?
百度没找到相应的答案,还好在stackoverflow找到了一个相应的问答,特翻译如下:
原文链接1:Putting a simple if-then-else statement on one lin.
条件语句详解链接2:Does Python have a ternary conditional operator?
注:题主python .7.1,pycharm 2.8.2
Question:
有statement/语句if-elif-else如下:
if i>100:x=2elif i<100:x=1else:x=0
我个人觉得下边的代码更简洁,但是为什么教程上不这么用呢?
x=2 if i>100 else i<100 1 else 0
注: 在三元操作符里边,使用 if-elif-else无法运行。
+++++++++++Answer1st+++++++++++
此谓三元操作符的应用,python下的三元操作语法如下:
value_when_true if condition_is_ture else value_when_condition_is_false
举个(伪代码)栗子:
'Yes' if fruit == 'Apple' else 'No' """判断是不是‘苹果’。如果结果是‘苹果’,if语句首先返回‘True’(这一步我们看不到),然后返回‘Yes’同时else条件语句不再执行;如果if返回的是‘False’,则执行else语句并返回结果‘No’。"""
+++++++++++Answer2nd+++++++++++
—— 该问题的答主觉得是因为它不符合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 else 2 if i>100 else 0>>> a0>>> i=101>>> a = 1 if i<100 else 2 if i>100 else 0>>> a2>>> i=99>>> a = 1 if i<100 else 2 if i>100 else 0>>> a1
需要注意的是上边的代码是jupyter风格的,多谢weixin_41505223和lycommand (if elif else是规范的写法。我之前的if else else 可以运行,但是不规范,或者说是错误的)。
现在补充一下Python 自带IDE,或者Pycharm的代码:
i=100a = 1 if i<100 else 2 if i>100 else 0print(a)# 输出:0i=101a = 1 if i<100 else 2 if i>100 else 0print(a)# 输出:2i=99a = 1 if i<100 else 2 if i>100 else 0print(a)# 输出:1
-12更新:
上边的代码,有N个i就需要写N遍“a = 1 if i<100 else 2 if i>100 else 0 print(a)”。有没有感觉麻烦呢?其实可以只写一遍代码
最初级方法:手动运行N次模块,手动输入N次i的到N个结果。代码如下
h = input('请输入数字:')# 运行之后,请在输出窗口手工输入相应的数字。注意:a的格式是stri = float(h)# 将输入的str格式地数字,转换为float格式,之后才能进行大小运算a = 1 if i<100 else 2 if i>100 else 0print(a)
进阶方法1/2:自动运行N次模块,手动输入N次i得到N个结果。代码如下:
def xunhuan(): # 中心思想是建立函数,在函数的结尾处自我调用形成循环,即不用手工运行h = input('请输入数字:') i = float(h) a = 1 if i<100 else 2 if i>100 else 0print(a)xunhuan()# 自己调用自己,形成无限循环,除非手动关掉代码xunhuan() # def开头的即python的“函数”,函数必须通过调用才会被执行
——这也就是python的“函数”啦。
进阶方法2/2,这一次,我知道所有的i:即一次输入N个i,得到N个结果。代码如下
def xunhuan():h = input('请输入所有数字,数字间用英文逗号隔开:') shuzi = h.split(',') # 用split()函数,把string比如" 'a', 'b', 'c' "转换为list的['a', 'b', 'c'] for i in shuzi:i = float(i)a = 1 if i<100 else 2 if i>100 else 0print(a)xunhuan()if __name__ == '__main__':xunhuan()
如果想知道"if __name__ == '__main__':"什么鬼,可以参考下我的这篇笔记:if __name__ == "__main__":应该怎么样理解呢?
欢迎交流讨论。^.^