Python 骚操作之条件判断 | Python 主题月

295 阅读2分钟

本文正在参加「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 ,竟然有这么多骚操作。

这六种写法里,最推荐使用的是第一种,自己也经常在用,简洁直白,代码行数还少。