Python lambda

lambda 通常称为匿名函数,常用于定义一些很简单的函数。
注意: lambda是一个表达式,lambda会创建一个函数对象,但不会把这个函数对象赋给一个标识符;而def是语句,def会把一个函数对象赋值给一个变量。

表达式 Expressions
有值,所以可以写在赋值语句的右侧,而import,for等语句不能被用于赋值。

语句 Statement
不一定有值。语句有简单语句和复合语句之分:简单语句是指一逻辑行的代码,例如表达式语句、赋值语句和return语句等。复合语句是指包含、影响或控制一组语句的代码。例如if、try和class语句等。

因为lambda是表达式,所以可以直接作为list或dict的成员 [lambda x: x*x, lambda x: x+x] 但是def等语句无法直接放入其中。

lambda用法:

pord = lambda x: x*x
print pord(2) 
# 4

prod2 = lambda x,y: x*y
print prod2(2,3)
# 6

lambda 后面只能有一个语句,就如def 的 return 一样用于返回值,所以无法在后面使用多余的语句如if等,并且这样返回也是错的:

prod = lambda x,y: x,y
# NameError: name 'y' is not defined

来看看 def 定义的函数会返回什么?

>>> def y():
...     x = 2
...     y = 4
...     return x,y
... 
>>> y()
(2, 4)
>>> type(y())
<type 'tuple'>

返回了一个元组,return并不能返回多个值,故而a, b 被语法糖元组给包裹了,但是很显然lambda并不支持这么做。

lambda起到简化语句,并且不需要担心命名冲突。lambda 也可直接作为函数的返回语句,起到一个闭包Closure的作用:

>>> def a(x, y):
...     return lambda : x*x + y*y
... 
>>> a(2,3)
<function <lambda> at 0x7f2133346320>
>>> a(2,3)()
13

你甚至可以配合reduce高阶函数利用一条代码就实现一个阶乘:

>>> factorial = lambda x: reduce(int.__mul__, xrange(2,x+1))
>>> factorial(10)
3628800
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值