zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    stylish——一键为网页换肤,改变字体大小,去除广告
    css3实现可以计算的自适应布局——calc()
    用一个div模拟textarea并实现高度自适应
    关于background定位
    CSS3 :nth-of-type() 选择器
    css3圣诞雪景球
    ie6、7、8兼容部分css3
    html5 录制mp3音频,支持采样率和比特率设置
    html5 图片上传,支持图片预览、压缩、及进度显示,兼容IE6+及标准浏览器
    grunt配置太复杂?使用Qbuild进行文件合并、压缩、格式化等处理
  • 原文地址:https://www.cnblogs.com/newmet/p/10037420.html
Copyright © 2011-2022 走看看