概述
简介
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
示例
def debug(func):
def wrapper(*args, **kwargs): # 接受任意参数
print("[DEBUG]: enter {}()".format(func.__name__))
print('Prepare and say...')
return func(*args, **kwargs)
return wrapper # 返回
@debug
def say(something):
print("hello {}!".format(something))
say('rebot')
[DEBUG]: enter say()
Prepare and say...
hello rebot!
Process finished with exit code 0
带参装饰器
def Args(level):
def debug(func):
def wrapper(*args, **kwargs): # 接受任意参数
print("[{level}]: enter function {func}()".format(level=level,func=func.__name__))
print('Prepare and say...')
return func(*args, **kwargs)
return wrapper # 返回
return debug
@Args(level='INFO')
def say(something):
print("hello {}!".format(something))
say('rebot')
类外含参装饰器
class logging(object):
def __init__(self, level):
self.level = level
def __call__(self, func): # 接受函数
def wrapper(*args, **kwargs):
print(
"[{level}]: enter function {func}()".format(
level=self.level,
func =func.__name__))
func(*args, **kwargs)
return wrapper # 返回函数
@logging(level='INFO')
def say(something):
print("say {}!".format(something))
say('robot')
[INFO]: enter function say()
say robot!
Process finished with exit code 0
装饰器的理念是对原函数、对象的加强,相当于重新封装,所以一般装饰器函数都被命名为wrapper()
,意义在于包装。函数只有在被调用时才会发挥其作用。比如@logging
装饰器可以在函数执行时额外输出日志,@cache
装饰过的函数可以缓存计算结果等等。
而注解和特性则是对目标函数或对象添加一些属性,相当于将其分类。这些属性可以通过反射拿到,在程序运行时对不同的特性函数或对象加以干预。比如带有Setup
的函数就当成准备步骤执行,或者找到所有带有TestMethod
的函数依次执行等等。
最后
以上就是善良柠檬为你收集整理的python带参装饰器、类外含参装饰器简介示例带参装饰器类外含参装饰器的全部内容,希望文章能够帮你解决python带参装饰器、类外含参装饰器简介示例带参装饰器类外含参装饰器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复