python 函数式编程工具

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]
>>> 

  


原文地址:https://www.cnblogs.com/lucyliu/p/5776374.html