Python中内置了一个有意思的函数:lambda,允许我们快速定义单行的最小的函数,先来看一个简单的例子:
清单1
- >>>def f(x):
- ... return 2**x
- ...
- >>>f(3)
- 8
- >>>
我们可以用lambda函数实现:
清单2
- >>> a = lambda x:2**x
- >>> a(3)
- 8
- >>>
当然也可以写成更简单方式:
清单3
- >>>(lambda x:2**x)(3)
- 8
- >>>
我们注意lambda函数与其他函数语法定义不同的地方:
1、参数列表周围没有括号
2、没有 return 关键字(它是隐含存在的,因为整个函数只有一行)
3、该函数没有函数名称,但是可以将它赋给一个变量来使用,此时变量中是lambda函数的引用
lambda 是一种风格问题。不一定非要使用它。假如你在你的项目中大量使用 lambda 函数,你会发现你的程序变得非常难于维护.(参考:<dive into python>)
我们再来看一个例子来深入学习:
清单4
- >>>a, b = 2, 4 #a=2, b=4
- >>>(lambda x:x*x)(a and b)
- 16
- >>>(lambda x:x*x)(a or b)
- 4
- >>>
如果你学习过其他编程语言,比如 C 或者 pascal ,一定对形如 bool? a:b
这样的表达式很熟悉,当然python中也有类似的表达式,但是我们现在讨论的是将类似的表达式放到 lambda
函数中去,所以这时我们要用到奇妙的 and 和 or 运算.
来看一个 and 运算的例子:
清单5
- >>>'a' and 'b'
- 'b'
- >>> '' and 'b'
- ''
- >>> 'a' and 'b' and 'c'
- 'c'
1、使用 and 时,表达式从左到右进行运算,按照惯例,0,'',(),{},[],None 在布尔运算时为假;除此之外的任何东西都为真.
2、如果表达式中的某个值为假,and 运算返回第一个假值
3、所有值都为真,and 运算返回最后一个真值
在上面的例子中,'' 是第一个假值
来看一个 or 运算的例子:
清单6
- >>>'a' or 'b'
- 'a'
- >>>'' or 'b'
- 'b'
- >>>'' or [] or {}
- {}
- >>>def func():
- ... print "in func()"
- ... return 1
- >>>'a' or func()
- 'a'
1、or 的运算顺序和 and 相同,都是从左到右
2、它返回第一个真值,而且是立即返回,这意味着它将放弃后面的比较。(如果人生也能如此简单就好了)
3、如果所有的值都为假,它返回最后一个假值
现在我们回过头来再去看清单4中的例子,是不是觉得简单多了?
呵呵,是的,python 还有很多神奇之处,我会在学习的过程中不断的和大家分享。
本文来自 python吧
,欢迎转载,但请保留我站链接,谢谢。
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛