@functools.lru_cache(maxsize=128, typed=False) 此装饰器可以缓存最多maxsize个函数的调用结果,从而提高程序的执行效率,适合于耗时的函数。拥有cache_clear和cache_info和两个方法,分别是清空缓存和打印缓存信息
@lru_cache(maxsize=32)
def fib(n):
global a
a += 1
print(f'{a}get in fib')
if n < 2:
return n
return fib(n-1)+fib(n-2)
[fib(n) for n in range(16)]
[fib(n) for n in range(17)]
------------------------------------------
1get in fib
2get in fib
3get in fib
4get in fib
5get in fib
6get in fib
7get in fib
8get in fib
9get in fib
10get in fib
11get in fib
12get in fib
13get in fib
14get in fib
15get in fib
16get in fib
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]
17get in fib
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987]
singledispatch 函数重载,只有第一个参数重载
from functools import singledispatch
@singledispatch
def connect(address, c1, c2):
print(f' 传输参数类型为:{type(address)},不是有效类型')
@connect.register
def _(address: str, c1, c2):
ip, port = address.split(':')
print(f'参数为字符串,IP是:{ip}, 端口是:{port}')
@connect.register
def _(address: tuple, c1, c2):
ip, port = address
print(f'参数为元组,IP是:{ip}, 端口是:{port}')
connect('123.45.32.18:8080', '1:1', '2:2')
connect(('123.45.32.18', 8080), '1:1', '2:2')
connect(123, 4, 5)
reduce(function, iter[, init]) function 函数 iter 可迭代对象啊 init 初始参数
reduce(lambda x, y: x+y, [1,2,3,4,5])
>>> 15
reduce(lambda x, y: x+y, [1,2,3,4,5],10)
>>> 25