python标准库中的装饰器

python标准库中的装饰器,第1张

文章目录
  • 前言
  • 修饰器实例
  • 小结


前言

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
修饰器就是一个语法糖(在不添加新功能的情况下,是程序更友善)
比较复杂

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/739543.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-04-28
下一篇2022-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存