装饰器所需要的知识:1.函数即“”变量“” 2.高阶函数 3嵌套函数
一。函数即变量
1.装饰器的本质是函数,就是为其他函数添加附加功能。
2.装饰器使用原则:1.不修改被装饰函数的源代码,
2.也不修改被装饰函数的调用方式。
3.变量是存在于内存当中,x=1,x在程序完成后就会被删除,或者del也可以删除x,但删除不了1,1是python定期刷新清理没有使用的变量时删除。
二,高阶函数
1,把一个函数名单做实参传给另一个函数
2,返回值中包含函数名
def bar()
print ("in the bar")
bar#bar()是函数,根据函数即变量,可以得到bar是指向这个函数的内存地址。
def test1(func)
print(func)
test1(bar)#注意这里是函数名,而非函数,这才叫高阶函数。
def too():
def rrr():#这叫函数的调用,必须是def里面有def。
def too():
rrr()#这叫 函数的调用。
完整事例如下:
#edit by weiwei xu
import time
def timer(func):#func=test1
def deco(*args,**kwargs):#传递参数
start_time=time.time()
func(*args,**kwargs)
stop_time=time.time()
print("the func run time is %s" % (stop_time-start_time))
return deco
@timer #test1=timer(test1) test1()=deco()
def test1():
time.sleep(3)
print("in the test1")
@timer
def test2(name,age):
time.sleep(3)
print("xww:",name,age)
test1()
test2(‘xww‘,22)
运行结果如下:
in the test1
the func run time is 3.000171661376953
xww: xww 22
the func run time is 3.000171422958374