Python基础知识之装饰器

                      装饰器

 https://www.cnblogs.com/EVA-J/articles/7194277.html

1. 装饰器的形成过程

2.装饰器的作用

3.语法糖

原则: 开放封闭原则

----------------------------------------------------------------------------------------------------------------------------------------------------------------

固定模式:装饰器固定模式

===========================================================================================

1.

 

import  time

def func():
    time.sleep(0.01)
    print("大家好")



def timer(f):
    start = time.time()
    f()
    end = time.time()
    print(end-start)

timer(func)

解读这段代码 !

  首先 ,我们定义一个函数 func为例实现 leader交给我的功能! ok ,这个func函数假装已经完成我们想要的功能 。

  现在 我们想要在func函数的基础上增加  计算程序运行时间的功能,引入time 模块 ,通过 time.time()获取当前时间

  这样 ,我们的func函数可以这样写

  def func():
    start = time.time() # 程序运行前时间

    print("大家好,才是真的好!")  # 这里假装是我们的业务逻辑代码,想象这有很多行好吧。

    end = time.time()  # 程序运行结束时间  

    print(end - start)   #  获取时间差,就可以知道程序运行时间的长短了。

  这样就是我们在函数原有的基础上扩展的功能 !

  但是,违背了我们开发中的 开放-封闭原则!

  开放:对扩展是开放的

  封闭:对修改是封闭的

  不想修改函数的调用方式,但是还在原有的函数前后添加功能

  ----------------------------------------------------------------------------------

  那我们把 要增加功能的函数当作参数  

  增加一个装饰器函数

  def timer(f):

    def inner()

      start = time.time()

      f()

      end = time.time()

      print(end-start)

    return inner

 

func  = timer()  # 这里返回的是inner 相当于把inner的内存地址赋值给了func

func()  这里实际执行的是 inner()   -----  最终获取了  print(end-start)

ok, 这就是我们的装饰器函数

timer就是一个装饰器函数,只是对一个函数  有一些装饰作用

 

 ===========================

 语法糖的概念

 就是让代码更简洁,像吃糖一样开心 ~~哈哈

@timer  #装饰器函数的函数名

 def func():

  pass      # 要贴着被装饰的函数

 

这才是真正的 不改变函数调用方式

 

 装饰带参数函数的装饰器

 

19.27  动态参数 !!!

*arg  **kwargs 能hold整个世界

 

 

 wrapper  装饰器

 

 

www.cnblogs.com/eva-j/articles/7194277.html

 

posted @ 2018-12-15 11:22  python-club  阅读(179)  评论(0编辑  收藏  举报