python functool,python functools.partial
本文主要介绍Python的functools模块的使用和描述,具有很好的参考价值。希望对大家有帮助。如有错误或不足之处,请不吝赐教。
目录
partial update _ wrapperwrapsreducecmp _ to _ key LRU _ cachesingledispatch
partial
用于创建一个分部函数,将默认参数包装到一个可调用对象中,返回的结果也是一个可调用对象。
分部函数可以固定原函数的一些参数,这样更容易调用。
从functools导入部分
int2=部分(int,base=8)
打印(int2(123 ))
# 83
update_wrapper
由partial包装的函数没有__name__和__doc__属性。
Update_wrapper函数:将包装函数的__name__和其他属性复制到新函数中。
从functools导入update_wrapper
定义包装2(功能):
def inner(*args):
返回函数(*参数)
返回update_wrapper(inner,func)
@wrap2
def演示():
打印(“hello world”)
打印(演示。__name__)
#演示
wraps
warps函数用于复制装饰器中被装饰函数的__name__。
就是在update_wrapper上做一个包装器。
从functools导入包装
定义包装1(功能):
@wraps(func) #移除它,它将返回到内部
def inner(*args):
打印(功能。__name__)
返回函数(*参数)
返回内部
@wrap1
def演示():
打印(“hello world”)
打印(演示。__name__)
#演示
reduce
相当于Python2中的内置函数reduce
该函数将一个序列相加为一个输出。
reduce(函数、序列、起始值)
从functools导入减少
l=范围(1,50)
打印(缩小(x,y:x y,l))
# 1225
cmp_to_key
list.sort中有一个关键参数,内置函数sorted。
x=[hello , worl , ni]
x.sort(键=长度)
打印(x)
# [你好,世界,你好]
Python3以前提供了cmp参数来比较两个元素。
Cmp_to_key函数用于将旧的比较函数转换为key函数。
lru_cache
允许我们快速缓存或取消缓存函数的返回值。
这个装饰器用于缓存函数的调用结果。对于需要多次调用的函数,每次调用的参数都是一样的,可以使用这个装饰器来缓存调用结果,从而加快程序运行速度。
这个装饰器在内存中缓存不同的调用结果,所以要注意内存占用。
从functools导入lru_cache
@lru_cache(maxsize=30) # maxsize参数告诉lru_cache缓存了多少最近的返回值。
定义纤维(n):
如果编号为2:
返回
返回光纤(n-1)光纤(n-2)
print([fib(n) for n in range(10)])
Fib.cache_clear() #清除缓存
singledispatch
Python3.4中新增的单一分发器用于实现通用函数。
根据单个参数的类型确定调用哪个函数。
从functools导入单个调度
@singledispatch
def fun(text):
打印(字符串:文本)
@fun.register(int)
def _(text):
打印(文本)
@fun.register(列表)
def _(text):
对于k,v在枚举(文本):
打印(k,v)
@fun.register(float)
@fun.register(元组)
def _(text):
打印(浮点型,元组)
有趣(“我是胡博”)
乐趣(下)123
乐趣([a , b , c])
乐趣(1.23)
Print(fun.registry) #所有通用函数
Print(fun.registry[int]) #获取int的泛型函数
# String:我是胡博
# 123
# 0 a
# 1 b
# 2 c
#浮点型,元组
# { class object : fun at0x 106 d10f 28,class int : function _ at0x 106 f0b 9d 8,class list : function _ at0x 106 f0ba 60,class tuple : function _ at0x 106 f0bb 70,class float : function _ at0x 106 f0bb 70 }
# function _ at0x106f0b9d8
以上个人经验,希望给你一个参考,也希望你能支持盛行的IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。