Functools
functools
模块应用于高阶函数,即参数或/和返回值为其他函数的函数。 通常来说,此模块的功能适用于所有可调用对象。
cache
cached_property
cmp_to_key
lru_cache
一个装饰器,可以给函数提供缓存功能。
他有两个可选参数
maxsize
(default:128
)- 最多缓存
maxsize
组缓存 - 如果设置为None,缓存可无限增长
- 最多缓存
typed
(deault:False
)- 如果设置为True,则不同类型的函数参数将分别缓存。
- 类型特异性仅适用于函数的直接参数而不是它们的内容。
from functools import lru_cache
@lru_cache
def calc(a: int , b : int) -> int:
print("--calc--")
return a + b
if __name__ == "__main__":
print(calc(10,15))
print(calc(10,15))
print(calc(10,15))
print(calc(10,15))
print("--clear cache--")
calc.cache_clear()
print(calc(10,15))
print(calc(20,30))
print(calc(10,15))
print(calc(20,30))
print("--cache info--")
print(calc.cache_info())
print("--original function--")
print(calc.__wrapped__(10,15))
print(calc.__wrapped__(20,30))
print(calc.__wrapped__(10,15))
print(calc.__wrapped__(20,30))
注:
-
通过
__wrapped__
属性可以访问到原函数。 -
cache_clear
可以清除缓存。 -
cache_info
返回一个tuple(hits,misses, maxsize,currsize)
。 -
LRU
函数前缀指的就是Least Recently Used
算法。也就是说缓存数量大于maxsize
时,将会清除最不常使用的缓存结果。
total_ordering
partial
partialmethod
reduce
这个函数会对参数序列中元素进行累积。用传给 reduce
中的第一个参数(是一个函数)先对集合中的第 1
、2
个元素进行操作,得到的结果再与第三个数据用这个函数运算,最后得到一个结果。
这个函数大致等同于以下函数:
def reduce(function, iterable, initializer=None):
it = iter(iterable)
if initializer is None:
value = next(it)
else:
value = initializer
for element in it:
value = function(value, element)
return value
示例:
from functools import reduce
i = [1,2,3,4,5]
def add(a,b):
return a+b
print(reduce(add, i))