python学习笔记 day11 装饰器(二)

语法糖

之前我们使用装饰器时,是为了增加func()函数的功能,有保证func()函数不改变,代码独立性,但是对外还是调用func()函数,然而实现的功能是扩展了之后的,我们是这样做的:

import time
def func():
    print("哈哈哈哈")

def wrapper(f):
    def inner():
        start=time.time()
        time.sleep(0.01)
        f()
        end=time.time()
        print(end-start)
    return inner
func=wrapper(func)
func()

上面的那句func=wrapper(func)其实可以不用写,而是在被装饰函数func()的上面加上@装饰器函数的函数名

import time
def wrapper(f): #装饰器函数
    def inner():
        start=time.time()
        time.sleep(0.01)
        f()
        end=time.time()
        print(end-start)
    return inner

@wrapper  #在被装饰函数的上面(紧挨着)加上@装饰器函数名 效果等同于下面的func=wrapper(func)
def func():  #被装饰的函数
    print("哈哈哈哈")
# func=wrapper(func)
func()

这样就更明显了,直接就好像仍然是调用了func()函数,却好像对原来的func()函数功能进行了扩展;

被装饰的函数func()带有返回值

import time
def wrapper(f):  #装饰器函数参数为被装饰函数的函数名
    def inner():
        start=time.time()
        time.sleep(0.01)
        ret=f()
        end=time.time()
        print(end-start)
        return ret
    return inner

@wrapper
def func():
    return '哈哈哈哈'  #被装饰函数带有返回值

ret=func()  #是有返回值的
print(ret)

程序执行过程:

被装饰函数带有一个参数

被装饰函数带有无敌函数

猜你喜欢

转载自www.cnblogs.com/xuanxuanlove/p/9563163.html