python解释器

#!/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这个变量。这个过程中传的是什么呢

python解释器

 

由此可以看出来,asd=shuchu这句代码是将shuchu的内存地址传给asd

python解释器

 

所以可以最上面修饰器中

@shuchu  #dayin=shuchu(dayin)

中已经将dayin的内存地址给了canshu

所以在之后canshu()

直接运行了dayin()

 

上一篇:asd


下一篇:javascript闭包