Python的functools模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。
functools模块 函数工具模块
reduce()
partial()偏函数
偏函数是通过将一个函数的部分参数预先绑定为某些值
从而得到一个新的具有较少可变的函数
warps()
为了不影响python的使用,当函数被装饰器函数装饰后,消除装饰器带来的一些副作用
partial()函数
from functools import partial //引用一个模块
def add(x, y, c): //定义一个函数拥有三个传参
print(x) //并输出传参的值,方便我们直接查看函数partial的作用
print(y)
print(c)
return x + y + c //最后输出三个数的和
a = add(1, 3, 6) //调用函数
print(a)
add1 = partial(add, y =2) //这里就是通过partial函数固定函数中的一个参数
r = add1(x = 50, c = 30)
print(r)
add2 = partial(add, y =20, c = 40) //这里是固定两个参数
print(add2(56)) //调用函数并打印返回值
#通过这里可以看到partial的作用为固定函数中参数的值并生成一个新的函数,
使我们能够在不修改原函数的情况下,调用函数
reduce()函数
格式:reduce(function, iterable)
参数function是函数,此函数的参数必须是两个。(lambda x, y: x * y可用匿名函数)
参数iterable是一个可迭代对象
from functools import reduce //加载模块
list1 = list(range(1, 11)) //生成一个列表
test = reduce(lambda x, y:x + y, list1) //这是reduce和匿名函数的配合使用最后结果为求和
print(test)
list2 = ['t', 'e', 's', 't']
test2 = reduce(lambda x, y:x + y, list2) //也可对字符串进行拼接
print(test2)
wraps()函数
wraps的作用是将被装饰的函数的一些属性传给修饰器函数(wrapper),让它具备某些功能
在不影响装饰器使用的情况下,可以直接使用被调用函数的内置功能
from functools import wraps
def test(func):
@wraps(func) //在这里添加wraps函数,注意:添加wraps函数,要在前面添加@
def wrapper(*args, **kwargs):
print('test1')
func(*args, **kwargs)
//这里使代表调用函数test2(),因为前面test2已经作为参数func给了test函数
return wrapper
@test
def test2():
print('test2')
test2()
print(test2.__name__) #加上wraps后函数test2依然时函数test2,并没有改变
'''
#加了@wraps以后能够在使用装饰器的情况下,再使用自身的内置功能。