装饰器函数外层再套工厂函数传递参数

2021-07-21  本文已影响0人  Chaweys

两个嵌套函数组成闭包用来作为装饰器,闭包第一层只能传函数名,没有传递参数的位置,
所以最外层的函数的作用是将参数作为局部变量传递给闭包,然后就可以在闭包中使用参数了。


def get_parameter(*args, **kwargs):  #工厂函数,用来接收@get_parameter((1, 2), {"a": "1"})传递的参数(1, 2), {"a": "1"}
    def funOut(func):                #两个嵌套函数组成的闭包用来作为装饰器
        def funIn():
            print(*args, **kwargs)
            print("现在开始装饰")
            func()
            print("装饰结束")
        return funIn
    return funOut


@get_parameter((1, 2), {"a": "1"})
def works():
    print("我是被装饰的函数")
    
结果:
(1, 2) {'a': '1'}
现在开始装饰
我是被装饰的函数
装饰结束
    
上一篇 下一篇

猜你喜欢

热点阅读