python装饰器

装饰器有啥用,装饰器可以在不改变原有函数的前提下,对代码增加功能,实现代码解耦。要学装饰器,必须要搞懂闭包,二者是相辅相成的。

看上面这个图,我在调用test1(12)的时候发生了什么?@set_func ,等价于test1 = set_func(test1),由此可知我在调用set_func的时候,把test1函数当做参数传递进去了,又因为set_func函数是一个闭包,里面函数call_func,用到了set_func的变量,那么此时,我在call_func里面调用func(num),就相当于我调用了test1(),在来看set_func的返回值是返回了call_func在内存中的地址,我再去调用test1(),就相当于我调用了call_func,

代码运行时间的装饰器:

import time

def run_time(func):
    def end_time(*args):
        start_time = time.time()
        func(*args)
        stop_time = time.time()
        print('代码运行时间为:{}'.format(stop_time - start_time))
    return end_time

有返回值的装饰器:

def set_func(func):
    def call_func(*args,**kwargs):
        print('---这是权限验证1---')
        return func(*args,**kwargs)

    return call_func


@set_func          #等价于test1 = set_func(test1)
def test1(num,*args,**kwargs):
    print('---test1---{0}'.format(num))
    print('---test1---{0}'.format(args))
    print('---test1---{0}'.format(kwargs))
    return 'ok','200'

test1(12)
原文地址:https://www.cnblogs.com/xiamaojjie/p/12101891.html