day11_装饰器

装饰器的本质:一个闭包函数

装饰器的功能:在不修改原函数及其调用方式的情况下对原函数功能进行扩展

import time

def func():
    time.sleep(0.01)
    print("加油")
def timer(f):             #装饰器函数
    def inner():
        start = time.time()
        f()          #被装饰函数
        end = time.time()
        print(end - start)
    return inner

func = timer(func)
func()
#不修改原有的函数调用方式,但原有函数前后添加功能
#timer就是一个装饰器函数只是对一个函数有一些装饰作用

 语法糖:

import time
def timer(func):
    def inner():
        start = time.time()
        func()
        print(time.time() - start)
    return inner

@timer   #==> func1 = timer(func1)        语法糖:@装饰器的名字
def func1():                              被装饰的函数
    time.sleep(0.1)
    print('in func1')


func1()
带有返回值
import time def timer(func): def inner(
*args,**kwargs): start = time.time() re = func(*args,**kwargs) print(time.time() - start) return re return inner @timer #==> func2 = timer(func2) def func2(a): print('in func2 and get a:%s'%(a)) return 'fun2 over' func2('aaaaaa') print(func2('aaaaaa')) #输出返回值
# 装饰器模式
def warpper(func):
    def inner(*args, **kwargs):
        re1 = func(*args, **kwargs)  # 修饰函数
        return re1

    return inner  # 无括号


@warpper  # 等价于  func = warpper(func)---返回值是 inner
def func(*args, **kwargs):
    print("123")


re1 = func()  # 函数inner---返回值是re1
原文地址:https://www.cnblogs.com/wzc27229/p/10992053.html