• Python-21_装饰器-02_装饰器实现


    -------------------------------------------------- 一、基本:--------------------------------------------------

    import time
    """
    # 1、装饰器框架:
    def timer(func):
        def wrapper():
            print(func)
            func()
        return wrapper    
    """
    # 2、装饰器实现例子:
    # 1)、装饰器:
    def timer(func):
        def wrapper():
            start_time = time.time()
            func()  # 运行的是foo()
            stop_time = time.time()
            print("被装饰函数test运行时间 %s" % (stop_time - start_time))
        return wrapper
    # 2)、被装饰函数:
    @timer              # @timer   就相当于 foo=timer(foo)  需要放在被装饰函数的上面!!!!
    def foo():
        time.sleep(2)
        print("需要增加功能的原程序")
        return "原程序返回值"
    # 3)、调用装饰器:
    # foo=timer(foo)          # timer(foo) 返回的是wrapper内存地址
    foo()  # 执行的是wrapper

    --------------------------------------------------二、加上返回值:--------------------------------------------------

    import time
    # 1)、装饰器:
    def timer(func):
        def wrapper():
            start_time=time.time()
            res=func()              # 运行的是foo()  如果原程序有return返回值,这里将func()运行结果赋值给res,然后return res
            stop_time=time.time()
            print("被装饰函数foo运行时间 %s" %(stop_time-start_time))
            return res
        return wrapper
    
    # 2)、被装饰函数:
    @timer              # @timer   就相当于 foo=timer(foo)  需要放在被装饰函数的上面!!!!
    def foo():
        time.sleep(2)
        print("需要增加功能的原程序")
        return "原程序返回值"
    # 3)、调用装饰器:
    # foo=timer(foo)          # timer(foo) 返回的是wrapper内存地址
    a=foo()                    # 执行的是wrapper
    print(a)

    -------------------------------------------------- 三、加上参数:--------------------------------------------------

    import time
    # 1)、装饰器:
    def timer(func):
        def wrapper(*args,**kwargs):               # *args,**kwargs  可以接收任何个数(多个)的参数
            start_time=time.time()
            res=func(*args,**kwargs)              # 运行的是foo()  如果原程序有return返回值,这里将func()运行结果赋值给res,然后return res
            stop_time=time.time()
            print("被装饰函数foo运行时间 %s" %(stop_time-start_time))
            return res
        return wrapper
    
    # 2)、被装饰函数:
    @timer              # @timer   就相当于 foo=timer(foo)  需要放在被装饰函数的上面!!!!
    def foo(name,age):
        time.sleep(2)
        print("需要增加功能的原程序 名字 %s 年龄 %s" %(name,age))
        return "原程序返回值"
    # foo=timer(foo)
    a=foo("newmet",18)
    print(a)

    -------------------------------------------------- 四、装饰器实现汇总:--------------------------------------------------

    import time
    # 定义一个求取函数运行时间的、装饰器框架
    def timer(func):
        def wrapper(*args,**kwargs):
            start_time=time.time()
            res=func(*args,**kwargs)
            stop_time=time.time()
            print("函数运行时间:%s" %(start_time-stop_time))
            return res
        return wrapper
    # 原始函数--需要被装饰的函数
    @timer
    def foo(name,age):
        time.sleep(3)
        print("from the test 名字 %s 年龄 %s" %(name,age))
        return "这是test的返回值"
    res=foo("newmet",16)
    print(res)
  • 相关阅读:
    python通过fake_useragent循环输出你需要的user-agent
    php来进行cc防护
    destoon7.0 蜘蛛访问统计插件
    Redis来限制用户某个时间段内访问的次数
    数据结构(十):复杂图-加权有向图,最短路径
    数据结构(十):复杂图-加权无向图,最小生成树
    数据结构(十):复杂图-有向图,拓扑图
    数据结构(十):图
    数据结构(九):并查集
    数据结构(八):优先队列-索引优先
  • 原文地址:https://www.cnblogs.com/newmet/p/10037420.html
Copyright © 2020-2023  润新知