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)
  • 相关阅读:
    快速创建jsp页面的方法
    Webstorm的一些常用快捷键
    eclipse 怎么在new菜单里添加JSP file选项?
    人生最重要的时候,从30岁到35岁:为生命多积累一些厚度
    android 生命周期四代码
    android WebView onJsAler onJsC…
    android java js 回调 真心好用
    linux下dlopen的使用
    android ndk jni 实例1
    android 退出程序 结束线程
  • 原文地址:https://www.cnblogs.com/newmet/p/10037420.html
Copyright © 2011-2022 走看看