今天来教大家“茴香豆”的茴
字有几种写法,啊不,Python的 if - else
有几种写法,后面几种比较容易挨揍,特别是最后一种,请评估好自身抗击打能力后,谨慎使用。
为了方便教学,这里以一个简单的例子来讲解,题目是:根据年龄来判断是未成年还是成年?
Part1第一种
age = 20
if age > 18:
print('成年')
else:
print('未成年')
这种写法是最中规中矩,也最容易理解的。
但是有人嫌这种写法,代码行数太多了,怎么更简洁一点,于是就出现了:
Part2第二种
result = '成年' if age > 18 else '未成年'
Python中没有三目运算符(三元运算符),但可以通过一行if-else
这种语法格式来实现三元表达式的效果。
代码比起第一种行数更少,但增加了阅读理解的难度,特别是对于初学者和其他语言的使用者来讲。
受此启发,也有人写出了:
Part3第三种
result = age > 18 and '成年' or '未成年'
这里利用了表达式判断中“短路原则”:当一个布尔表达式的前半部分表达式已经可以确定整个表达式的结果时,后半部分表达式将不再执行。
当 age>18
为真,成年
作为字符串进行布尔判定也为真,那么后面的or
的部分就不再执行了,而赋值语句又会把and
后的值'成年'
赋给变量result
,从而实现了意图;
当 age>18
为假,那么后面的or
的部分参与运算,而赋值语句又会把or
后的值'未成年'
赋给变量result
,从而实现了意图。
挨打指数:★★★
即使一行代码,仍然有人觉得代码太复杂,既然选择精简,那就贯彻到底咯。
于是又有了:
Part4第四种
result = ('未成年', '成年')[age > 18]
这里先是用'未成年'
和 '成年'
两个字符串构建出一个元组,然后用[]
加下标来按位置取元素值,这里又用到一个知识点,age>18
的运算结果是 True
或False
,而在 Python 中,True
跟数字 1
等值,False
跟数字 0
等值,运算的结果正好作为元组的下标,取到正确的字符串。
挨打指数:★★★★
“和尚摸得,我摸不得?”
元组可以这么玩,那字典凭什么不行?
Part5第五种
result= {True: "成年", False: "未成年"}[age > 18]
这里有个知识点,True
和False
是不可变对象,因此可以作为字典的键名,先构建出字典,然后用[]
加键名来取值,age>18
的计算结果就是键名,理所当然,天经地义!至于挨打的事,就看你抗不抗揍了。
挨打指数:★★★★
上面的方法虽然已经够烧脑了,但有人还不满足,为了让代码尽量简短
,想出了更骚的操作:
Part6第六种
result= '未成年'[age>18:]
这里充分利用了字符串的特性,将不同年龄取值变成了字符串下标的差异。age>18
的计算结果就是对应的下标起始位置,然后对字符串进行切片,得到正确的结果。
挨打指数:★★★★★
这番脑洞和操作,连洪世贤来了都得感叹一句:
你学废了吗?