高阶函数、嵌套函数、装饰器
其实这三种都是函数,运用高阶函数和嵌套函数就能写出装饰器
装饰器的主要作用,是不修改原有函数代码,不改变原有函数调用方式,增加原有函数功能的一种函数,两种原则缺一不可。
举例:
import time def timer(fun): def decorery(): start_time=time.time() fun() stop_time=time.time() print("the fun time :%s"%(stop_time-start_time)) return decorery @timer def text() time.sleep(2) print("in the text") text()
timer就是一个装饰器,在没有改变text的代码及调用方式的情况下,为text增加了计算时间的功能。
这里有有几个问题,
一、如果text参数,而且参数个数不固定,怎么解决
那么久需要在decorery函数上面增加不固定形式参数。
decorery(*args,**kwars)
后面的调用把参数加入:
fun(*args,**kwars)
二、如果text有返回值
那么decorery就也需要返回值,return fun(*args,**kwars)
三、如果装饰器需要参数来增加装饰器的功能,怎么传递参数
这个就需要多一层函数嵌套:
import time def timer(typee): def caks(fun) if type=="local": def decorery(*args,**kwars): start_time=time.time() fun(*args,**kwars) stop_time=time.time() print("the fun time :%s"%(stop_time-start_time)) return decorery else: print("do nothing") return caks @timer(type="local") def text() time.sleep(2) print("in the text") text()
这样就达到了传递参数的目的
其实,装饰器能达到目的,主要是运用了:
1、返回值可以是函数
2、函数也是变量,可以通过赋值给其他变量,然后通过变量加()来调用这个函数
来源:https://www.cnblogs.com/woshimanong/p/7722176.html