functools 模块提供了一些非常有用的高阶函数。所谓高阶函数就是说一个可以接受函数作为参数或者以函数作为返回值的函数,因为Python中函数也是对象,因此很容易支持这样的函数式特性。
一、偏函数
偏函数就是提前为函数绑定一些已经知道的函数参数,这样调用这个函数会更简单。
1、partial函数
它适用于一般的函数事先绑定参数
1 2 3 4 5 6 7 8 9
| from functools import partial def add(a,b): return a+b
print(add(4, 3))
plus = partial(add, 100) print(plus(200))
|
2、partialmethod函数
partialmethod适用于给类里面的函数事先绑定参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| import functools class Person(object): def __init__(self, age): self.age = age
def add(self, a, b): return self.age+a+b
age_01 = functools.partialmethod(add, a=3) age_02 = functools.partialmethod(add, a=3, b=4)
p = Person(20) age1 = p.age_01(b=4) age2 = p.age_02() print(age1) print(age2)
|
二、递推函数
reduce可以实现一些常见的”累加”、”累乘”操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| from functools import reduce
a = [1,2,3,4,5]
b = reduce(lambda x,y:x+y, a) c = reduce(lambda x,y:x+y, a, 10) print(b) print(c)
b = reduce(lambda x,y:x*y, a) c = reduce(lambda x,y:x*y, a, 10) print(b) print(c)
|
三、命名元组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import functools
Animal = functools.namedtuple('Animal','name age height')
dog = Animal('小狗',5,23) print(dog) print(dog.name) print(dog.age) print(dog.height)
new_dog = dog._asdict() print(new_dog) print(new_dog['name']) print(new_dog['age']) print(new_dog['height'])
|
更多