标签:代码 运行时间 *args 没有 span art als ret cti
#函数的作用域是就近原则
def warpper():
    name = ‘cici‘
    print(‘i am out of  box %s‘%name)
    def deco():
        name = ‘lily‘
        print(‘i am in box %s‘%name)
        def hhh():
            print(‘xxxx %s‘%name) ###### 这一层没有自己的name,要取name的值就往上找,离他最近的name = ‘lily‘
        hhh()
    deco()
    print(‘外面的name是%s‘%name)
warpper() ## result is : i am out of  box
#装饰器
#作用是在不改变原有函数的入参情况下给函数添加新功能
import time
def run():
    print(‘run..‘)
    time.sleep(1)
def run_time(func):
    start_time = time.time()
    func()
    end_time= time.time()
    print(‘run函数运行是‘,end_time - start_time)
run_time(run)
############### 装饰器
def timer(func):
    def deco(*args,**kwargs): ########## 统计函数运行时间 ######## *args,*kwargs是用来接收调用函数的参数
        start_time = time.time()
        func(*args,*kwargs)
        end_time = time.time()
        print(‘run函数运行时间‘, end_time - start_time)
    return deco
#上面这个函数其实就是返回了一个函数名,函数名存的是一段代码
#@time  ######调用是写 @ timer
def run():
    print(‘run...‘)
    time.sleep(1)
t = timer(run)
print(t)   #######返回内存地址: <function timer.<locals>.deco at 0x00617ED0>
r = timer(run)  ## r == deco()   这段代码即是 @ timer 这一句代码
#调用timer函数的时候,要传入一个方法名
#timer函数在函数内部调用叫做deco
#又在函数deco 函数内部调用了timer里面传入的方法
r() ########### r ==dec0(),运行r()就是调用的deco()
标签:代码 运行时间 *args 没有 span art als ret cti
原文地址:http://www.cnblogs.com/yuer011/p/6985602.html