本文主要用于讲述如何使用functools中的几个函数的使用
partial
该方法主要用于简化一些固化了参数的函数调用,例如下面示例中需要对一些二进制数转换成十进制,那可以使用int('0b11',base=2),如果有大量需要转换的二进制数时,每次都输入base=2这个参数很多余,这就可以使用partial了,使用了partial之后,以后再需要转换二进制数时只需要bin_10('0b11')即可
from functools import partial
bin_10 = partial(int, base=2)
print(bin_10("0b11"))
map
map(func, seq),其含义指的是:对后面可迭代序列中的每个元素执行前面的函数func的功能,最终获取到一个新的序列,python3返回一个迭代器,可以使用list得到一个列表
list(map(lambda x,y : x*y,(1,2,4),(2,3,6)))
[2, 6, 24]
reduce
reduce(function, sequence [, initial] ) -> value
reduce依次从sequence中取一个元素,和上一次调用function的结果做参数,再次调用function。
reduce.jpg
第一次调用function时,如果提供initial参数,会以initial和sequence中的第一个元素作为参数调用function(initial为a,sequence中的第一个元素为b),如果没提供会以序列sequence的第一个数(作为a)和第二个数(作为b)作为参数调用
from functools import reduce
def add(a, b):
print(a, b)
return a + b
reduce(add, [1, 2, 3, 4, 5],0.1)
0.1 1
1.1 2
3.1 3
6.1 4
10.1 5
filter
filter()函数用于过滤序列,过滤掉不符合条件的那些元素,返回符合条件的元素组成新列表。
序列中的每个元素作为参数传递给函数进行判断,返回True或者False,最后将返回True的元素放到新列表中。
下面函数get_num是过滤出列表中大于2的数字
filter(function, iterable) # 前者为函数,后者为待执行的序列
def get_num(a):
return True if a > 2 else False
print(list(filter(get_num, [1, 2, 3, 4, 5])))
[3, 4, 5]