python 中的三元表达式及lambda

#####1、三元表达式 举一个简单的列子,不少地方都有这样的规定,好比用水或者用电,假设用水价格为3R/立方米,当你每月用超过7立方米后,超出的水按照3.3R/立方米计价。而后写一个程序计算一个家庭每个月的水费。函数

>>> def cost(x):
...     if x < 7 :
...         pay = x*3
...     elif x > 7:
...         pay = 21 + (x-7)*3.3
...     return pay

这个程序段很是简单,逻辑就不用说了,条件不一样计价方式就不同,可是当咱们用三元表达式去写一样功能的这段函数是这样的 pay = x*3 if x < 7 else (21+(x-7)*3.3) 再来一个简单的例子,两个数,咱们返回其中较大的那个数。code

>>> def max_(a, b):
...     if a > b:
...         max = a
...     else:
...         max = b
...     return max

当用三元表达式来来写就能够是:max = a if a > b else b 看起来就简洁不少了,这才是Python吗!字符串

#####2、lambdait

>>> def add(x, y)
...     sum = x+y
...     return sum

用lambda表达式来写就是:add = lambda x, y:x+y 而后直接调用add(1, 2)就能够获得结果 若是把三元式中的cost函数列子用lambda表达式来写就是:再增长一个抄表服务费,参数sclass

>>> cost = lambda x, s: (x*3 if x < 7 else (21+(x-7)*3.3)) + s
>>> cost(6, 4)
22

能够看到lambda的使用让咱们大量的简化了代码,看起来更美观简洁,固然是牺牲了一些可读性,让不熟悉Python的人看得不是很明白 下面介绍一个列子来了解为何要用lambda processFunc = collapse and (lambda s: " ".join(s.split())) or (lambda s: s)效率

在Visual Basic,你颇有可能要建立一个函数,接受一个字符串参数和一个 collapse 参数,并使用 if 语句肯定是否压缩空白,而后再返回相应的值。这种方式比较低效,由于函数可能须要处理每一种可能的状况。每次你调用它,给出你结果前,都要判断是否要压缩空白。在 Python 中,你能够将决策逻辑拿到函数外面,而定义一个裁减过的 lambda 函数提供确切的 (惟一的) 你想要的。这种方式更为高效、更为优雅,并且不多引发那讨厌的bug。`

lambda 定义了一个匿名函数

lambda 并不会带来程序运行效率的提升,只会使代码更简洁。

若是可使用for...in...if来完成的,坚定不用lambda。

若是使用lambda,lambda内不要包含循环,尽可能定义函数来完成,使代码得到可重用性和更好的可读性。

总结:lambda 是为了减小单行函数的定义而存在的。