本文正在参加「Python主题月」,详情查看 活动链接
Python 语言里有许多的高级特性。虽然很高级,但是不易理解。 在团队合作里,炫技是大忌, 简单明了才是长久之计。
举一个栗子
这是一段非常简单的通过分数判断成绩是否及格的代码,由于代码行数过多,有些人就不太愿意这样写,因为这体现不出自己多年的 Python 功力。
if score > 60: return "及格" else: return "不及格"
下面我列举了五种这段代码的变异写法,一个比一个骚。
不知道这些高级用法的人,一定会看得一脸懵逼,理解了之后,又不经意大呼:卧槽,还可以这样写?。
然后就要开始爆粗口了:这TM给人看的代码?
第一种
语法:
<expression 1> if <condition> else <expression 2>
例子
>>> score1 = 80
>>> score2 = 50
>>>
>>>
>>> msg1 = "及格" if score1 > 60 else "不及格"
>>> print msg1
及格
>>>
>>> msg2 = "及格" if score2 > 60 else "不及格"
>>> print msg2
不及格
>>>
第二种
语法
<expression> and <on_true> or <on_false>
例子
>>> msg1 = score1 > 60 and "及格" or "不及格"
>>> msg2 = "及格" if score2 > 60 else "不及格"
>>>
>>> print(msg1)
及格
>>>
>>> print(msg2)
不及格
第三种
语法
("false", "true")[condition]
例子
>>> msg1 = ("及格", "不及格")[score1 > 60]
>>> print(msg1)
及格
>>>
>>>
>>> msg2 = ("及格", "不及格")[score2 > 18]
>>> print(msg2)
不及格
第四种
语法
(lambda: <on_false>, lambda:<on_true>)[<condition>]()
例子
>>> msg1 = (lambda:"不及格", lambda:"及格")[score1 > 60]()
>>> print(msg1)
及格
>>>
>>> msg2 = (lambda:"不及格", lambda:"及格")[score2 > 60]()
>>> print(msg2)
不及格
第五种
语法
{True: <on_true>, False: <on_false>}[<condition>]
例子
>>> msg1 = {True: "及格", False: "不及格"}[score1 > 60]
>>> print(msg1)
及格
>>>
>>> msg2 = {True: "及格", False: "不及格"}[score2 > 60]
>>> print(msg2)
不及格
第六种
语法
((<condition>) and (<on_true>,) or (<on_false>,))[0]
例子
>>> msg1 = ((score1 > 60) and ("及格",) or ("不及格",))[0]
>>> print(msg1)
及格
>>>
>>> msg2 = ((score2 > 60) and ("及格",) or ("不及格",))[0]
>>> print(msg2)
不及格
以上代码,都比较简单,仔细看都能看懂。
真是活久见,学了这么久的 Python ,竟然有这么多骚操作。
这六种写法里,最推荐使用的是第一种,自己也经常在用,简洁直白,代码行数还少。