!usrbinenvpythoncoding:utf8一functools介绍1、functools模块可以说主要是为函数式编程而设计,用于增强函数功能。2、functools模块用以为可调用对象(callableobjects)定义高阶函数或操作。3、functools下面包括:partialupdatewrapperwrapsreducecmptokeylrucachesingledispatch二updatewrapper介绍1、updatewrapper字面意思:更新包装,具体意思为:更新函数的包装2、函数的包装是什么?函数的包装,就是在函数的外面,在包装一个函数3、为什么要更新外部的这个包装函数呢?应用场景介绍:partial的功能:用于创建一个偏函数,将函数包装一个可调用对象,返回结果也是可调用对象。偏函数可以固定住原函数的部分参数,从而在调用时更简单。注意这句话最重要的是固定部分参数(关于partial方法,可以看我上一篇文章,我也同时在平台发了视频教程,请移步)partial这个方法,就是在包装别的函数!!!来个具体的例子,一个班级内学生互相借笔的例子。defborrow(student1,student2):同学一找同学二借笔!print(f{student1}找{student2}借了一只铅笔!)大家都找王五借铅笔,这样很累呀!这时候partial方法可以上线了,把王五这个参数进行固定。fromfunctoolsimportpartialborrowPenFromWangwupartial(borrow,student2王五)borrowPenFromWangwu(李四)现在出现了一个问题:有一个新来的同学,他不知道怎么借铅笔,需要看一下这个两个方法的用法?print(borrow。name)上边代码输出:borrowprint(borrow。doc)上面代码输出:同学一找同学二借笔!help(borrow)Helponfunctionborrowinmodulemain:borrow(student1,student2)同学一找同学二借笔!通过这三个方法,他发现了borrow方法的用处。新来的同学,开始查看,borrowPenFromWangwu这个偏方法。try:print(我的name是:,borrowPenFromWangwu。name)exceptAttributeError:print(noName)上面代码输出为:onName。为什么这个方法没有name?print(borrowPenFromWangwu。doc)上面代码输出为:partial(func,args,keywords)newfunctionwithpartialapplicationofthegivenargumentsandkeywords。这也不是期望的东西呀,对borrowPenFromWangwu方法的理解毫无帮助。help(borrowPenFromWangwu)classpartial(builtins。object)partial(func,args,keywords)newfunctionwithpartialapplicationofthegivenargumentsandkeywords。输出很多,关于partial方法的信息,对borrowPenFromWangwu方法的理解毫无帮助。应该如何获取borrowPenFromWangwu,这个方法的说明?partial这个方法包装了borrow这个方法,返回的结果命名为borrowPenFromWangwu,通过help(borrowPenFromWangwu)这个方法,缺返回了partial这个方法的信息。这时候我们就需要updatewrapper,这个方法来更新一下partial这个外包装。fromfunctoolsimportupdatewrapper开始更新外包装updatewrapper(borrowPenFromWangwu,borrow)查看外包装是否被更新了。print(我的name是:,borrowPenFromWangwu。name)上一行代码的输出:我的name是:borrowprint(borrowPenFromWangwu。doc)上一行代码的输出为:同学一找同学二借笔!help(borrowPenFromWangwu)Helponfunctionborrowinmodulemain:borrow(student1,student2)同学一找同学二借笔!结论:这样新来的同学,就知道了借笔的方法。这也是updatewrapper这个方法的用法了,一句话总结:设置外部函数的name和doc属性,让代码对新人或者是健忘的人,更友好。