函数闭包基本实现

函数闭包基本实现


#装饰器的架子
#@语法糖   用法 @timmer 就相当于 test =timmer(test)
# 使用时在要修改函数前加:@+装饰器函数名


'''
#基本写法
def timmer(func):
    def wrapper():
        print(func)
        func()
    return  wrapper

import time

def timmer(func):#func=test
    def wrapper():
        start_time = time.time()
        func()#运作test()
        stop_time = time.time()
        print('yxsj%s'%(stop_time-start_time))
    return wrapper

@timmer    # test =timmer(test)
def test():
    time.sleep(2)
    print("test wan")
# res=timmer(test) #返回的是wrapper的地址  return的是wrapper
# res()#执行的是wrapper()

# test=timmer(test) #返回的是wrapper的地址  return的是wrapper
# test()#执行的是wrapper()
test()


#函数闭包加上返回值

import time

def timmer(func):#func=test
    def wrapper():
        start_time = time.time()
        res=func()#赋值给res
        stop_time = time.time()
        print('yxsj%s'%(stop_time-start_time))
        return res
    return wrapper

@timmer    # test =timmer(test)
def test():
    time.sleep(2)
    print("test wan")
    return 'jieguo'
res=test()
print(res)
'''
#函数闭包加上参数

'''
import time

def timmer(func):#func=test
    def wrapper(name,age):
        start_time = time.time()
        res=func(name,age)#赋值给res
        stop_time = time.time()
        print('yxsj%s'%(stop_time-start_time))
        return res
    return wrapper

@timmer    # test =timmer(test)
def test(name,age):
    time.sleep(2)
    print("test wan, 名字【%s】 年龄【%s】" %(name,age))
    return 'jieguo'
res=test('susu',29)
print(res)
'''

import time

def timmer(func):#func=test
    #注意事项,一般函数参数是可变的,在写装饰器函数时用(args,kwargs)
    def wrapper(*args,**kwargs):
        start_time = time.time()
        res=func(*args,**kwargs)#赋值给res
        stop_time = time.time()
        print('yxsj%s'%(stop_time-start_time))
        return res
    return wrapper

@timmer    # test =timmer(test)
def test(name,age,):
    time.sleep(2)
    print("test wan, 名字【%s】 年龄【%s】 " %(name,age))
    return 'jieguo'
res=test('susu',29,)
print(res)

@timmer    # test =timmer(test)
def test1(name,age,yyy):
    time.sleep(2)
    print("test wan, 名字【%s】 年龄【%s】 kk【%s】" %(name,age,yyy))
    return 'jieguo'
res=test1('susu',29,99)
print(res)

 

posted @ 2018-11-01 14:51  汉魂县令  阅读(37)  评论(0)    收藏  举报