python 无参装饰器和有参装饰器的使用

# python 无参装饰器

# 计算时间的装饰器
import time


# 3. 调用timer, 这里的x其实就是 copy 函数
def timer(x):
    def outter():
        start = time.time()
        # 4. 这里的x是参数, 等同于执行了 copy()
        res = x()
        end = time.time()
        # 5.这里面计算时间差的功能就是装饰器新家的功能
        print(f"耗时{end - start}")
        return res
    return outter


# 2. 因为装饰器的存在, 调用copy等同于调用(timer(copy))
# 2. 把copy当参数传递给timer
@timer
def copy():
    with open('./pwd.txt', mode="r", encoding="utf-8") as f, \
            open('./pwd2.txt', mode="w", encoding="utf-8") as f2:
        str2 = f.readline()
        while (str2):
            f2.write(str2)
            str2 = f.readline()


# 1.调用copy
copy()

 

# python 有参装饰器
def wrap1(base):
    def wrap2(fn):
        def wrap3(*args, **kwargs):
            res = fn(*args, **kwargs)
            return res * base
        return wrap3
    return wrap2


@wrap1(base=3)
def add(x, y):
    return x + y


res = add(2, 6)

print(res)

 

posted @ 2022-03-27 12:03  深海里的星星i  阅读(53)  评论(0)    收藏  举报