本文实例讲述了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解释器如何回收变量:采用。当引用有没有了时(门牌号不存在),变量就被回收了。
函数的定义也有内存回收机制,与变量回收机制一样。匿名函数没有函数名,就会被回收。
变量的使用:先定义再调用,只要在调用之前已经存在(定义)即可,函数即变“量”,函数的使用是一样的。
函数调用顺序:其他的高级语言类似,
下面的两段代码运行效果一样:
def bar (): print(“在酒吧”) def foo (): 打印(“foo”) 酒吧() foo () # python为解释执行,函数foo在调用前已经声明了酒吧和foo,所以酒吧和foo无顺序之分 def foo (): 打印(“foo”) 酒吧() def bar (): print(“在酒吧”) foo () >之前运行结果:
在foo引用>
在酒吧里
在foo
在酒吧里注意:
原理图为:
<强> 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装饰器原理及应用实例详解