python装饰器 - 2

目录

  • 使用装饰器统计函数的执行时间
  • 对有参数, 无返回值的函数进行装饰
  • 用同一个装饰器对多个函数进行装饰
        • 装饰器在没有调用函数之前就已经装饰了

使用装饰器统计函数的执行时间

import time

def set_func(func):
    def call_func():
        start_time = time.time()
        func()
        stop_time = time.time()
        print("alltime is %f" % (stop_time-start_time))
    return call_func


@set_func
def test1():
    print("-----test1-----")
    for i in range(1000):
        pass

test1()

对有参数, 无返回值的函数进行装饰

import time

def set_func(func):
    def call_func(a):
        print("-----1------")
        func(a)

    return call_func


@set_func
def test1(num):
    print("-----test1-----%d" % num)


test1(100)

执行流程

  1. 程序从上往下执行, 创建了一个函数 set_func(). 并不进去执行
  2. @set_func 相当于 ret = set_func(test1), 调用set_func(), 把test1的引用作为参数传递过去. func指向了test1
  3. test1 就指向了 set_func的返回值, 即 call_func

用同一个装饰器对多个函数进行装饰

def set_func(func):
    def call_func(a):
        print("-----1------")
        func(a)

    return call_func


@set_func
def test1(num):
    print("-----test1-----%d" % num)

@set_func
def test2(num):
    print("-----test2-----%d" % num)

test1(100)
test2(200)

python装饰器 - 2_第1张图片

装饰器在没有调用函数之前就已经装饰了

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