Python3.5装饰器原理及应用实例详解

  

本文实例讲述了Python3.5装饰器原理及应用。分享给大家供大家参考,具体如下:

  

<强> 1,装饰器:

  

(1)本质:装饰器的,其基本语法都是用关键字def去定义的。

  

(2)功能:装饰其他函数,即:。

  

(3)原则:即:装饰器对待被修饰的函数是完全透明的。

  

(4)简单应用:统计函数运行时间的装饰器

        导入的时间   #统计函数运行时间的砖装饰器   def timmer(函数):   def经纱(* args, * * kwargs):   strat_time=time.time ()   函数()   stop_time=time.time ()   print (“% s函数运行时间”% (stop_time-strat_time))   返回经   @timmer   def test1 ():   time . sleep (3)   打印(“test1”)   test1 ()   之前      

运行结果:

  
  test1中


  函数运行时是3.000171661376953

     

(5)实现装饰器知识储备:

  

,函数即“变量”

  

b,高阶函数

  

c函数嵌套

  

d,高阶函数+嵌套函数==纷笆纹?/p>   

<强> 2,装饰器知识储备——函数即“变量”

  

  

Python解释器如何回收变量:采用。当引用有没有了时(门牌号不存在),变量就被回收了。

  

函数的定义也有内存回收机制,与变量回收机制一样。匿名函数没有函数名,就会被回收。

  

 Python3.5装饰器原理及应用实例详解

  

变量的使用:先定义再调用,只要在调用之前已经存在(定义)即可,函数即变“量”,函数的使用是一样的。

  

函数调用顺序:其他的高级语言类似,

  

下面的两段代码运行效果一样:

        def bar ():   print(“在酒吧”)   def foo ():   打印(“foo”)   酒吧()   foo ()   # python为解释执行,函数foo在调用前已经声明了酒吧和foo,所以酒吧和foo无顺序之分   def foo ():   打印(“foo”)   酒吧()   def bar ():   print(“在酒吧”)   foo ()         之前      

运行结果:

  
  在foo


  在酒吧里
  在foo
  在酒吧里

     

注意:   

原理图为:

  

 Python3.5装饰器原理及应用实例详解

  

<强> 3,装饰器知识储备——高阶函数

  

满足下列其中一种即可称之为高阶函数:

  

,

  b

  

(1)高阶函数示例:

        def bar ():   print(“在酒吧”)   def test1(函数):   打印(函数)#打印门牌号,即内存地址   函数()   test1 (bar) #门牌号func=酒吧   之前      

运行结果:

  
  

& lt;函数在零点酒吧x00bcdfa8>
  在酒吧里

     

(2)高阶函数的妙处——

        导入的时间   def bar ():   time . sleep (3)   print(“在酒吧”)   # test2在不修改被修饰函数酒吧的代码时添加了附加的及时功能   def test2(函数):   start_time=time.time ()   func() #运行酒吧   stop_time=time.time ()   print (“% s函数运行时间”% (stop_time-start_time))   #调用方式发生改变,不能像原来的方法去调用被修饰的函数(所以不能实现装饰器的功能)   test2 (bar)   # ()         之前      

运行结果:

  
  在酒吧里


  函数运行时是3.000171661376953

     

(3)高阶函数的妙处——

        导入的时间   def bar ():   time . sleep (3)   print(“在酒吧”)   def test3(函数):   打印(函数)   回归函数   酒吧=test3 (bar)   栏()#运行酒吧         之前      

运行结果:

  
  

& lt;函数在零点酒吧x00badfa8>
  在酒吧里

     

<强> 4,装饰器知识储备——嵌套函数

        #函数嵌套   def foo ():   打印(“foo”)   def bar(): #酒吧函数具有局部变量的特性,不能在外部调用,只能在内部调用   print(“在酒吧”)   酒吧()   foo ()   

Python3.5装饰器原理及应用实例详解