首页 > 其他 > 详细

装饰器

时间:2018-07-14 19:49:50      阅读:179      评论:0      收藏:0      [点我收藏+]

1.定义

  本质上是函数,用来装饰其他函数,给函数添加新的功能

2.原则

  •   不改变原来的函数代码
  •   不改变原来函数的调用方式

3.定义装饰器

def timmer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        func(args[0])
        end_time = time.time()
        print(fun1 run time is %s %(end_time - start_time))
    return wrapper

@timmer  # 等价于:fun1 = timmer(fun1), 此时fun1先指向函数1,然后指向新的函数wrapper
def fun1(a):
    time.sleep(3, a)
    print(fun1...)

if __name__ == __main__:
    fun1(10)   # 装饰器的实现原理: fun1 = timmer(fun1); fun1(10)

 

  本质上将函数指向新的函数地址。

4.高阶函数

  • 把一个函数名当做实参传递给一个函数 
  • 返回值中包含函数名

5.嵌套函数-函数即变量

 

6.参数,返回值

  嵌套函数的参数就是源函数的参数。

def timmer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(fun1 run time is %s %(end_time - start_time))
     return result
return wrapper @timmer # 等价于:fun1 = timmer(fun1), 此时fun1先指向函数1,然后指向新的函数wrapper def fun1(a): time.sleep(3, a) print(fun1...) if __name__ == __main__: fun1(10) # 装饰器的实现原理: fun1 = timmer(fun1); fun1(10)

 

 

7.装饰器的参数

@timmer(param = ‘‘)

import time

def timmer(param):
    print(param)
    def out_wrapper(func):
        def wrapper(*args, **kwargs):
            start_time = time.time()
            result = func(*args, **kwargs)
            end_time = time.time()
            print(fun1 run time is %s % (end_time - start_time))
            return result

        return wrapper
    return out_wrapper

@timmer(param=decorator param)  # fun1 = timmer(fun1)
def fun1(a,*b):
    print(fun1..., a, b)

if __name__ == __main__:
    fun1(10, 20, 20)

 

装饰器

原文:https://www.cnblogs.com/zhuxiang1633/p/9310741.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!