Functools - 简介
functools - 用于处理函数和可调用对象的工具:
functools,用于高阶函数:指那些作用于函数或者返回其它函数的函数,通常只要是可以被当做函数调用的对象就是这个模块的目标。
在Python 3.x 中具备如下方法,
cmp_to_key:将一个比较函数转换关键字函数;
partial:--- 针对函数起作用,并且是部分的;
reduce:---- 与python内置的reduce函数功能一样;
total_ordering:在类装饰器中按照缺失顺序,填充方法;
update_wrapper:更新一个包裹(wrapper)函数,使其看起来更像被包裹(wrapped)的函数;
wraps:-------- 可用作一个装饰器,简化调用update_wrapper的过程;
Functools - com_to_key
将老式的比较函数(comparison function)转换为关键字函数(key function),
与接受key function的工具一同使用(例如sorted,min,max,heapq.nlargest,itertools.groupby),该函数主要用于将程序转换成Python3.x格式的,
因为Python 3中不支持比较函数。
比较函数是可调用的,接受两个参数,比较这两个参数并根据他们的大小关系返回负值、零或者正值中的一个。关键字函数也是可调用的,接受一个参数,
同时返回一个可以用作排序关键字的值。
示例:
import random,time
from functools import cmp_to_key
item = [i for i in range(0,10)]
random.shuffle(item)
def compare(a,b):
return a-b
print(sorted(item,key=cmp_to_key(compare)))
输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 更像是排序? 就是排序! sorted:老子就是排序%¥#!@#,,
Functools - 偏函数partial
functools.partial(func, *args, **keywords),函数装饰器,返回一个新的partial对象。
调用partial对象和调用被修饰的函数func相同,只不过调用partial对象时传入的参数个数通常要少于调用func时传入的参数个数。
当一个函数func可以接收很多参数,而某一次使用只需要更改其中的一部分参数,其他的参数都保持不变时,partial对象就可以将这些不变的对象冻结起来,
这样调用partial对象时传入未冻结的参数,partial对象调用func时连同已经被冻结的参数一同传给func函数,从而可以简化调用过程。
如果调用partial对象时提供了更多的参数,那么他们会被添加到args的后面,
如果提供了更多的关键字参数,那么它们将扩展或者覆盖已经冻结的关键字参数。
应用场景:Flask为函数视图添加装饰器
partial对象的调用如下:(自动传参)
import functools
原函数:
def func(a,b,c):
return a+b+c
v1 = func(1,2,3)
偏函数:
1):
new_func = functools.partial(func, 11)
new_func(22, 33)
2):
new_func = functools.partial( func, 11, 22)
new_func(33)