Python python---吃透装饰器

云中一只猫 · 2021年03月05日 · 最后由 Neo Chen 回复于 2021年04月11日 · 1540 次阅读

python 的装饰器以前不咋会,挺好用,能写,但是原理真是不咋知道。


import datetime
import time


def catch_one(*zzz):
    print('---catch_one---1', *zzz)
    def function_name(fun):
        print('---catch_one---2', fun)
        time.sleep(1)
        def operate(*args, **kwargs):
            print('---catch_one---3', *args, **kwargs)
            print(datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S'))
            a =  fun(*args, **kwargs)
            print(datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S'))
            return a
        print('---catch_one---4')
        return operate
    print('---catch_one---5')
    return function_name


def catch_two(*aa):
    print('catch_two---1', aa)
    def function_two(func):
        print('catch_two---2', func)
        def par(*args, **kwargs):
            print('catch_two start...3', *args, **kwargs)
            func(*args, **kwargs)
            print('catch_two end...4')
        print('catch_two---5')
        return par
    print('catch_two---6')
    return function_two


@catch_two('aaaaaaaaaaaaa')
@catch('111')
def test(qq):
    time.sleep(qq)

def test_2(qq):
    time.sleep(qq)


共收到 1 条回复 时间 点赞
  1. 能将可调用对象作为参数,并返回可调用对象的可调用对象都能作为装饰器。
  2. 装饰器在导入时运行。

明白了这两点,随意发挥就好

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册