python装饰器应用场景
2021/10/26 17:12:00
本文主要是介绍python装饰器应用场景,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
# -*- coding:utf-8 -*- # 学习装饰器的一些常用场景 from functools import wraps def decorator_name(f): @wraps(f) def decorated(*arg, **kwargs): if not can_run: return('Function will not run') return f(*arg, **kwargs) return decorated @decorator_name def func(): return('Function is running') #can_run = True #print(func()) can_run = False print(func()) # 小结:@wraps接受一个函数来进行装饰,并加入了复制函数名称、注释文档、参数列表等功能。 # 这可以让我们在装饰器里面访问在装饰之前的函数的属性 """ 装饰器使用场景-授权(Authorization) """ # 装饰器能有助于检查某个人是否被授权去使用一个web应用的端点(endpoint)。它们被大量使用于 # Flask和Django web框架中。这里是一个例子来使用基于装饰器的授权 from functools import wraps def requires_auth(f): @wraps(f) def decorated(*args, **kwargs): auth = requests.authorization if not auth or not check_auth(auth.username, auth.password): authenticate() return f(*args, **kwargs) return decorated """ 装饰器使用场景-日志(Logging) """ # 日志是装饰器运用的另一个亮点,这是个例子 from functools import wraps def logit(func): @wraps(func) def with_logging(*args, **kwargs): print(func.__name__ + "was called") return func(*args, **kwargs) return with_logging @logit def addition_func(x): """Do some math""" return x + x result = addition_func(4) print(result) """ 带参数的装饰器-在函数中嵌入装饰器 """ from functools import wraps def logit1(logfile='out.log'): def logging_decorator(func): @wraps(func) def wrapped_function(*args, **kwargs): log_string = func.__name__ + " was called" print(log_string) # 打开logfile,并写入内容 with open(logfile, 'a') as opened_file: # 现在将日志打印到指定的logfile opened_file.write(log_string + '\n') return func(*args, **kwargs) return wrapped_function return logging_decorator @logit1(logfile='fun2.log') def myfun1(): pass myfun1() """ 装饰器类 """ from functools import wraps class logit2(object): def __init__(self, logfile='out.log'): self.logfile = logfile def __call__(self, func): @wraps(func) def wrapped_function(*args, **kwargs): log_string = func.__name__ + " was called" print(log_string) # 打开logfile,并写入内容 with open(self.logfile, 'a') as opened_file: # 现在将日志打印到指定的logfile opened_file.write(log_string + '\n') # 现在,发送一个通知 self.notify() return func(*args, **kwargs) return wrapped_function def notify(self): print('logit只打日志,不做别的') pass @logit2() def myfunc2(): print('调用通知') print('------') myfunc2() # 现在,我们给logit创建子类,来添加email的功能 class email_logit(logit2): """ 一个logit的实现版本,可以在函数调用时发送email给管理员 """ def __init__(self, email='mecexia@tencent.com', *args, **kwargs): self.email = email super(email_logit, self).__init__(*args, **kwargs) def notify(self): # 发送一封email到self.email # 这里就不做实现了 pass
这篇关于python装饰器应用场景的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-30Python中''') 是什么?-icode9专业技术文章分享
- 2024-11-26Python基础编程
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程