python——装饰器的使用

python装饰器的作用就是把一个函数作为参数传给另外一个参数

 

import time
def step1():
    for i in range(0,50):
        print("Step 1........")

def step2():
    for i in range(0,50):
        print("Step 2........")

def step3():
    for i in range(0,50):
        print("step 3 ........")

def timer(func):#函数作为参数传进来
    #统计函数运行时间的装饰器
    def wrapper():
        start = time.time()
        func()
        end = time.time()
        used = end -start
        print(f'{func.__name__} used {used}')
    return wrapper
timer(step1)()#将step作为一个参数传给timer,然后使用()调用函数,这个写法不好
timer(step2)()
timer(step3)()

 

但是这个写法不好,可以使用@作为语法糖

 

import time
def timer(func):#函数作为参数传进来
    #统计函数运行时间的装饰器
    def wrapper():
        print("程序开始运行")
        start = time.time()
        func()
        end = time.time()
        used = end -start
        print("程序运行结束")
        print(f'{func.__name__} 耗时 {used}')
    return wrapper

@timer
#使用@符号作为语法糖,当调用step1()函数的时候,python会找到@timer,将其作为step1()函数的代理
#python会先找timer函数,将其作为step1函数的代理
def step1():
    for i in range(0,50):
        print("Step 1........")

@timer
def step2():
    for i in range(0,50):
        print("Step 2........")

@timer
def step3():
    for i in range(0,50):
        print("step 3 ........")

step1()
step2()
step3()
posted @ 2021-03-15 21:16  朵朵奇fa  阅读(70)  评论(0编辑  收藏  举报