第二十七节 对有参数无返回值的函数进行装饰

def set_func(func):
    # print('装饰器开始装饰了...')
    def call_func(num):
        print('....权限1.....')
        print('....权限2.....')
        func(num)
    return call_func
    
@set_func  # 等价于 test1 = set_func(test1) 
def test1(num):
    print(".......这是test1......%d" % num)

test1(100)
test1(200) 

# 一个装饰器可以装饰多个函数,并不是函数调用时才装饰,可以在去掉函数调用验证
# 每装饰一个函数,就会生成一个闭包空间,会生成一个局部变量用来存储原来函数指向的地址,跟类生成一个实例对象类似




'''
必须使用闭包才能将对test1原指向保存下来

def set_func(func,num):
    a = func
    print('....权限1.....')
    print('....权限2.....')
    a(num)

# 等价于 test1 = set_func(test1) 
def test1(num):
    print(".......这是test1......%d" % num)
test1 = set_func(test1,100) 
test1(100)
test1(200) 
'''

 

posted @ 2020-03-31 00:53  kog_maw  阅读(136)  评论(0编辑  收藏  举报