python functools.partial,python functool
文档地址
functools.partial作用:
functools.partial通过包装手法,允许我们重新定义 函数签名
用一些默认参数包装一个可调用对象,返回结果是可调用对象,并且可以像原始对象一样对待
冻结部分函数位置函数或关键字参数,简化函数,更少更灵活的函数参数调用
#参数/关键字调用部分的时参数
def partial(func,*args,* *关键字):
def newfunc(*fargs,**fkeywords):
newkeywords=keywords.copy()
newkeywords.update(fkeywords)
return func(*(args fargs),**newkeywords) #合并,调用原始函数,此时用了部分的的参数
新函数。函数=函数
newfunc.args=args
newfunc.keywords=关键字
返回newfunc
声明:
urluquote=func工具。部分(urluquote,encoding=latin1 )
当调用urlenquote(args,*kargs)
相当于urlenquote(args,*kargs,encoding=latin1 )
例如:
导入功能工具
def add(a,b):
返回有
加法(4,2)
6
plus3=functools.partial(add,3)
plus5=functools.partial(add,5)
plus3(4)
七
plus3(7)
10
加号5(10)
15
应用:
典型的,函数在执行时,要带上所有必要的参数进行调用。
然后,有时参数可以在函数被调用之前提前获知。
这种情况下,一个函数有一个或多个参数预先就能用上,以便函数能用更少的参数进行调用。
functool.update_wrapper默认部分的对象没有__姓名_ _和__doc__,这种情况下,对于装饰器函数非常难以调试。使用更新包装器()从原始对象拷贝或加入现有部分的对象
它可以把被封装函数的__名称__、模块、_ _文档_ _和__词典_ _都复制到封装函数去(模块级别常量包装器分配、包装器更新)
功能工具。包装_分配
( __模块__ , __名称_ _ , _ _文档_ _ )
功能工具。包装_更新
( __dict__ ,)
这个函数主要用在装饰器函数中,装饰器返回函数反射得到的是包装函数的函数定义而不是原始函数定义
#!/usr/bin/env python
#编码:utf-8
定义包装(功能):
def call_it(*args,**kwargs):
wrap func: call_it
打印通话前
return func(*args,**kwargs)
回电_it
@wrap
def hello():
说你好
打印“你好,世界”
从函数工具导入更新_包装
定义包装2(功能):
def call_it(*args,**kwargs):
wrap func: call_it2
打印通话前
return func(*args,**kwargs)
返回更新包装器(称之为,func)
@wrap2
def hello2():
测试你好
打印《你好,世界2》
if __name__==__main__ :
你好()
打印你好.__姓名_ _
打印你好.__doc__
打印
hello2()
打印你好.__姓名_ _
打印你好.__doc__
得到结果:
通话前
你好世界
呼叫它
包函数:呼叫它
通话前
hello world2
hello2
测试你好
functool.wraps调用函数装饰器部分(update_wrapper,wrapped=wrapped,assigned=assigned,updated=更新)的简写
从函数工具导入包装
定义包装3(功能):
@wraps(func)
def call_it(*args,**kwargs):
wrap func: call_it2
打印通话前
return func(*args,**kwargs)
回电_it
@wrap3
def hello3():
测试你好3
打印“你好,世界3”结果
通话前
hello world3
hello3
测试你好3
功能工具。减少功能工具。减少(函数,可迭代的[,初始值设定项])
等同于内置函数减少()
用这个的原因是使代码更兼容(python3)
functools.cmp_to_key
将老式鼻尖函数转换成键函数,用在接受键函数的方法中(如sorted()、min()、max()、heapq.nlargest()、heapq.nsmallest()、itertools.groupby())
一个比较函数,接收两个参数,小于,返回负数,等于,返回0,大于返回整数
键函数,接收一个参数,返回一个表明该参数在期望序列中的位置
例如:
sorted(iterable,key=CMP _ to _ key(locale。str coll))#支持区域设置的排序顺序
功能工具。total _ ordering functools总计_排序(cls)
这个装饰器是在python2.7中添加的,它是为一个类准备的。如果至少定义了__lt__,le,gt,__ge__方法中的一个,使用这个decorator将自动实现类中的其他比较函数。
@总计_订购
班级学生:
def __eq__(自己,其他):
return ((self.lastname.lower()、self.firstname.lower())==
(other.lastname.lower()、other.firstname.lower())
def __lt__(自身,其他):
return ((self.lastname.lower()、self.firstname.lower())
(other.lastname.lower()、other.firstname.lower())
打印主任(学生)
得到
[__doc__ , __eq__ , __ge__ , __gt__ , __le__ , __lt__ , __module__]
涉及
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。