python标准库之函数式编程(2)

functools 模块提供了一些非常有用的高阶函数。所谓高阶函数就是说一个可以接受函数作为参数或者以函数作为返回值的函数,因为Python中函数也是对象,因此很容易支持这样的函数式特性。

一、偏函数

偏函数就是提前为函数绑定一些已经知道的函数参数,这样调用这个函数会更简单。

1、partial函数

它适用于一般的函数事先绑定参数

1
2
3
4
5
6
7
8
9
# coding:utf-8
from functools import partial
def add(a,b):
return a+b

print(add(4, 3)) # 直接调用

plus = partial(add, 100) # 先绑定一个参数100
print(plus(200)) # 调用时再添加另一个参数

2、partialmethod函数

partialmethod适用于给类里面的函数事先绑定参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# coding:utf-8
import functools
class Person(object):
def __init__(self, age):
self.age = age

def add(self, a, b):
return self.age+a+b # 在原来年纪上面加上a,b两个数

age_01 = functools.partialmethod(add, a=3) # 先给a绑定一个参数
age_02 = functools.partialmethod(add, a=3, b=4) # 先给a b都绑定一个参数

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
# coding:utf-8
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) # 首项是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
# coding:utf-8
import functools

Animal = functools.namedtuple('Animal','name age height')
# 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() # 将namedtuple转化为默认字典
print(new_dog) # 查看dog的内容
print(new_dog['name'])
print(new_dog['age'])
print(new_dog['height'])

更多