python标准库中的装饰器


前言

Python内置的用于装饰方法的函数:property、classmethod、staticmethod

本文可能涉及到的装饰器:functools.wraps functools.lru_cache functools.singledispatch


Yeah~

修饰器实例

def clock(func):
	@functools.wraps(func)
	def clocked(*args, **kwargs):
		t0 = time.time()
		result = func(*args, **kwargs)
		elapsed = time() - t0
		name = func.__name__
		arg_lst = []
		if args:
			arg_lst.append(', '.join(repr(arg) for arg in args))
		if kwargs:
			pairs = ['%s=%r' % (k, w) for k, w in sorted(kwargs.items())]
			arg_lst.append(', '.join(pairs))
		arg_str = ', '.join(arg_lst)
		print('[%0.8fs] %s(%s) -> %r ' % (elapsed, name, arg_str, result))
		return result
	return clocked
import functools
from clockdeco import clock

@functools.lru_cache()
@clock
def fibo(n):
	if n < 2:
		return n
	return fibo(n-2) + fibo(n-1)

print( fibo(6) )

lru_cache()可以接受配置参数
叠放装饰器:@lru_cache()应用到@clock返回的函数上

lru_cache(maxsize=128, typed=False)
maxsize指定存储多少个调用的结果(最好为2的幂),typed如果为True把1和1.0区分开


小结

lru_cache
修饰器就是一个语法糖(在不添加新功能的情况下,是程序更友善)
比较复杂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值