秒懂装饰器(带传参和返回值)

#-*- coding:utf-8 -*-
import time


'''传入的参数为func,即函数名(函数的地址),不是func(),若是func()即把函数的运行结果传入了timer'''
def timer(func): #将函数名传递给另一个函数作为参数,称之为高阶函数
    def deco(*args,**kargs):#在函数内定义一个函数,称之为函数的嵌套
        start_time=time.time()
        res=func(*args,**kargs)
        stop_time=time.time()
        print("the cost time is %s" %(stop_time-start_time))
        return res
    return deco

@timer #相当于test1=timer(test1),即把deco的地址给了test1
def test1():
    time.sleep(1)
    print("in the test1")
@timer
def test2(name,age):
    time.sleep(2)
    print("in the test2",name,age)
    return "test2 is running"

test1()
print(test2("kid",20))
in the test1
the cost time is 1.0076828002929688
in the test2 kid 20
the cost time is 2.0213704109191895
test2 is running

猜你喜欢

转载自blog.csdn.net/elite666/article/details/81193054