python装饰器

296 阅读1分钟

一般求区间偶数,然后计时

import time

def cal_even(num):
    if num%2 == 0:
        return True
    else:
        return False

def cal():
    t1 = time.time()
    for i in range(1,50000):
        if cal_even(i):
            print(i)
    t2 = time.time()
    print(t2-t1)
cal()

但是这样写便这里显得代码不够简洁,可读性不好

要是多个函数计时,便需要写多个段的计时间的time,便可以编写装饰器来代替这段代码,可以避免多个计时,将计时和函数计算分开

import time

def cal_decorate(func):
    def wrapper():
        t1 = time.time()
        func()
        t2 = time.time()
        print(t2-t1)
    return wrapper

def cal_even(num):
    if num%2==0:
        return True
    else:
        return False

@cal_decorate
def cal():
    for i in range(1,50000):
        if cal_even(i):
            print(i)
cal()

带参数的装饰器

import time
# func表示被装饰的函数
def cal_decorate(func):
    def wrapper(*args):
        t1 = time.time()
        func(*args)
        t2 = time.time()
        print(t2-t1)
    return wrapper

def cal_even(num):
    if num%2==0:
        return True
    else:
        return False

@cal_decorate
def cal(maxnum):
    for i in range(1,maxnum):
        if cal_even(i):
            print(i)
cal(5000)