python装饰器

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

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()

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

python装饰器_第1张图片

便可以编写装饰器来代替这段代码

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()

python装饰器_第2张图片

python装饰器_第3张图片

带参数的装饰器

import time

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)

python装饰器_第4张图片

你可能感兴趣的:(python装饰器)