Python 装饰器

本文深入探讨了Python中常用的装饰器,包括缓存装饰器、异常捕获装饰器、执行时间记录装饰器和日志记录装饰器。同时,还介绍了Python类中的装饰器,如属性装饰器、静态方法和类方法,提供了丰富的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python 常用的装饰器

import time

def caches(func):
	""" 缓存装饰器 """
	data = {}
	def wrapper(*args,**kwargs):
		key = '{}_{}_{}'.format(func.__name__,str(args),str(kwargs))
		if key in data:
			result = data[key]
			print('我是被缓存下来的!')
		else:
			result = func(*args,**kwargs)
			data[key] = result
			print('我是新来的!')
		return result
	return wrapper


def caches_upgrade(ex=None):
    """ 缓存装饰器升级版,如果超过某个时间就重新更新数据,ex:超时秒数 """
    data = {}

    def func_wrapper(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            key = f'{func.__name__}{args}{kwargs}'
            keyn = key + 'new_dt'
            new_dt = time.time()
            if key in data and ex and keyn in data and new_dt - data[keyn] > ex:
                data[key] = func(*args, **kwargs)
                data[keyn] = new_dt
            elif key not in data:
                data[key] = func(*args, **kwargs)
                data[keyn] = new_dt
            return data[key]

        return wrapper

    return func_wrapper


def errors(func):
	""" 异常捕获装饰器 """
	def wrapper(*args,**kwargs):
		try:
			return func(*args,**kwargs)
		except Exception as exc:
			print('出现异常:',exc)
	return wrapper

def times(func):
	""" 记录执行时间装饰器 """
	def wrapper(*args,**kwargs):
		start = time.time()
		result = func(*args, **kwargs)
		print('执行时间',time.time()-start,'秒')
		return result
	return wrapper

def loggers(func):
	""" 记录日志装饰器 """
	def wrapper(*args,**kwargs):
		print('记录日志:{}_{}_{}'.format(func,str(args),str(kwargs)))
		return func(*args, **kwargs)
	return wrapper


class Wrappers:
	""" Python 常用类里面的装饰器 """

	__slots__ = ('_name',)  # 此类里面允许的属性

	def __init__(self):
		self._name = None

	@property
	def name(self):
		""" 相当于GET方法,能像属性一样操作 """
		return self._name

	@name.setter
	def name(self,name):
		""" 相当于SET方法,能像属性一样操作赋值 """
		self._name = name

	@staticmethod
	def adds(x,y):
		""" 静态方法,在类没有创建实例的
			情况下,可以通过类名直接引用 """
		return x+y

	@classmethod
	def addc(self,x,y):
		""" 类方法 """
		return x+y

 

注:此代码只是个人根据当时的环境满足了当时的需求,记录下来用做后续参考!如有问题,请检查软硬件环境是否一致,由于时间精力有限,大部分未做详细环境描述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值