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 ,竟然有这么多骚操作。
这六种写法里,最推荐使用的是第一种,自己也经常在用,简洁直白,代码行数还少。