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)
  • 相关阅读:
    python_day06(ip代理池)
    二叉树的层次遍历之队列的使用
    推荐系统实战笔记 1.1什么是推荐系统
    牛顿法求平方根可拓展
    java LinkedHashMap实现LRUCache缓存
    交换两个变量常规四种做法
    交换两个变量之移位交换法
    推荐系统实战笔记01--前言
    Ubuntu 14.04更新为国内阿里源解决apt-get install无法执行的问题
    求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。
  • 原文地址:https://www.cnblogs.com/newmet/p/10037420.html
Copyright © 2011-2022 走看看