您的位置:首页 > 房产 > 家装 > 上海网站建设技术指导公司_广东省人民政府_投放广告的渠道有哪些_长沙网站推广智投未来

上海网站建设技术指导公司_广东省人民政府_投放广告的渠道有哪些_长沙网站推广智投未来

2025/7/15 1:22:57 来源:https://blog.csdn.net/zxcvbnm0207/article/details/145932821  浏览:    关键词:上海网站建设技术指导公司_广东省人民政府_投放广告的渠道有哪些_长沙网站推广智投未来
上海网站建设技术指导公司_广东省人民政府_投放广告的渠道有哪些_长沙网站推广智投未来

 1、普通装饰器

它实现的功能是:

                在函数执行前,先记录一行日志

                在函数执行完,再记录一行日志

# 装饰器函数,参数 func 是被装饰的函数
def logger(fun):
    def my_wrapper(*args,**kwargs):
        print('装饰器开始执行!',fun.__name__)
        # 真正执行的是这行。
        res = fun(*args,**kwargs)
        print('执行完毕!')
        return res
    return my_wrapper

@logger
def my_add(x,y):
    print('{}+{}={}'.format(x,y,x+y))

my_add(3,5)


​​​​​2、不带参数的类装饰器

        装饰器本身是一个函数,做为一个函数,如果不能传参,那这个函数的功能就会很受限,只能执行固定的逻辑。这意味着,如果装饰器的逻辑代码的执行需要根据不同场景进行调整,若不能传参的话,我们就要写两个装饰器,这显然是不合理的。

必须要实现 __init__(接收被装饰函数) 和 __call__(实现装饰逻辑) 两个方法
class no_logger_class:
    def __init__(self,func):
        self.func = func
    def __call__(self,*args, **kwargs):
        print('======第三种=======')
        print(f'[INFO]正在执行{self.func.__name__}')
        self.func(*args,**kwargs)

@no_logger_class
def no_my_wrapper(something):
    print('say {}!'.format(something))
no_my_wrapper('hello')

3、带参数的类装饰器

        上面不带参数的例子,你发现没有,只能打印INFO级别的日志,正常情况下,我们还需要打印DEBUG WARNING等级别的日志。 这就需要给类装饰器传入参数,给这个函数指定级别了。

        此时 __init__ :不再接收被装饰函数,而是接收传入参数。 __call__ :接收被装饰函数,实现装饰逻辑。

class logger_class:
    def __init__(self,level='INFO'):
        self.lever = level
    def __call__(self, func):
        def my_wrapper(*args, **kwargs):
            self.func = func
            print(f'[{self.lever}]正在执行{self.func.__name__}')
            return func(*args,**kwargs)
        return my_wrapper

@logger_class(level='WARNING')
def my_wrapper(something):
    print('say {}!'.format(something))
my_wrapper('hello')

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com