Python标准库 - functools模块

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中不支持比较函数。 比较函数是可调用的,接受两个参数,比较这两个参数并根据他们的大小关系返回负值、零或者正值中的一个。关键字函数也是可调用的,接受一个参数,
同时返回一个可以用作排序关键字的值。
版本3.2中新增。
    示例:
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)

 

 
 

posted @ 2018-04-29 15:27  焦国峰的随笔日记  阅读(583)  评论(0)    收藏  举报
// ############################### // ##############################