#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:sunjie import time #这个是装饰函数 def shuchu(canshu): def SHUCHU1(): start_time= time.time() #print(canshu) canshu() #print(canshu) print("这是装饰器输出") stop_time=time.time() print("run time : %s"%(stop_time-start_time)) return SHUCHU1 @shuchu #dayin=shuchu(dayin) #这个是需要被装饰的函数 def dayin(): print("这个是函数打印的运行值") dayin()
此处代码中,canshu这个东西到底是个什么东西呢!
他没有def声明,不是函数
但是还可以canshu()
当做参数使用。
其实不然:
请看下面代码:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:sunjie def shuchu(): print("123") asd=shuchu asd()
首先声明一个函数shuchu()
其次将函数的函数名shuchu传给asd这个变量。这个过程中传的是什么呢
由此可以看出来,asd=shuchu这句代码是将shuchu的内存地址传给asd
及
所以可以最上面修饰器中
@shuchu #dayin=shuchu(dayin)
中已经将dayin的内存地址给了canshu
所以在之后canshu()
直接运行了dayin()