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) <function make_incrementor.<locals>.<lambda> 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)) <filter object at 0x02A5E9F0> >>> 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)) <map object at 0x02A5E9F0> >>> 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] >>>