python wrapper 有参数的装饰器

创建日期: 2023-09-21 15:44 | 作者: 风波 | 浏览次数: 13 | 分类: Python

1. 无参数的装饰器

def exception_wrapper(func):
    def wrapper(*args, **kwargs):
        try:
            r = func(*args, **kwargs)
        except Exception as e:
            print(e)
        return r
    return wrapper

使用

@exception_wrapper
def hello():
    print("ni hao")

2. 有参数的装饰器

import functools
import time
import json


def timer(event='', comment=''):
    def _timer(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            start_time = time.time()
            r = func(*args, **kwargs)
            end_time = time.time()
            try:
                message = json.dumps({
                    "func": func.__name__,
                    "timecost": end_time - start_time,
                    "event": event,
                    "comment": comment,
                    })
                print(message)
            except Exception as e:
                pass
            return r
        return wrapper
    return _timer

使用

@timer() # 虽然没有参数,但是必须写括号
def hello():
    print("Ni hao")
13 浏览
8 爬虫
0 评论