1.Lambda函数
Python使用lambda支持在运行时创建匿名函数(没有绑定名称的函数)。
>>> g=lambda x:x+2
>>>
>>> print(g(8))
10
lambda函数并没有使用return语句---经常包含一个被返回的表达式。可以把lambda函数定义放置在任何需要函数的地方, 也不需要将其赋值给一个变量。
>>> def make_incrementor(n): return lambda x:x+n
>>> f=make_incrementor(2)
>>> g=make_incrementor(6)
>>> print(f)
. at 0x02A5DC00>
>>> print(f(42),g(23))
44 29
>>> print (make_incrementor(22)(12))
34
>>>
2.filter(),map(),reduce()函数
函数编程中lambda经常和一些典型的函数一起使用,例如:filter(), map() 和 reduce()。
filter()
filter(function, sequence) 返回一个 sequence(序列),包括了给定序列中所有调用 function(item) 后返回值为 true 的元素(如果可能的话,会返回相同的类型),并且,在python 3 中,map(),filter() 返回值已经不再是list,而是iterator,想要使用,只用将iterator 转换成list即可,list(map())
>>> def f(x):return x%3==0 or x%5==0
>>> filter(f,range(2,25))
>>> def f(x):return x%3==0 or x%5==0
>>> list(filter(f,range(2,25)))
[3, 5, 6, 9, 10, 12, 15, 18, 20, 21, 24]
map()
map(function, sequence) 为每一个元素依次调用 function(item) 并将返回值组成一个链表list返回。可以传入多个序列,函数也必须要有对应数量的参数
>>> def cube(x):
return x*x*x
>>> map(cube,range(1,11))
>>> list(map(cube,range(1,11)))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]
reduce()
reduce(function, sequence) 返回一个单值,它是这样构造的:首先以序列的前两个元素调用函数 function,再以返回值和第三个参数调用,依次执行下去。并且,在python 3中,reduce已经取消,如果使用,可以用fuctools.reduce来调用,但是要先导入fuctools
>>> import functools
>>> def add(x,y): return x+y
>>> functools.reduce(add,range(1,11))
55
例:利用lambda函数和filter求质数
>>> nums = range(2,50)
>>> for i in range(2,8):
nums=list(filter(lambda x:x==i or x%i ,nums))
>>> print(nums)
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
>>>