python 的灵活性之装饰器
函数装饰器:函数的相互嵌套,原来是两层,后来功能的增多增加到了三层
def th(arg): print(arg) def set_args(fun): def set_fun(*args, **kwargs): print("验证信息!") return fun(*args, **kwargs) return set_fun return set_args #必须返回闭包的引用! @th("niji") #在此处相当于 test = set_args(test) #传参问题 def test(): print("你好!") test() ''' 第一步先执行th("xxx")这个函数,得到闭包的引用,第二步@闭包的引用(@th) th 函数在函数执行前就已经执行了! '''
第二种:类来实现的装饰器
class roll(): def __init__(self, function): self.function = function def __call__(self, *args, **kwargs): print("添加额外的功能!") self.function() @roll #相当于 main = roll(main),也就是说函数调用前执行了创建对象的步骤 def main(): print("这是小明") main() #在这里实际调用的是对象! 对象() 实际是调用 __call__ 方法!
其实python 的装饰器实际上是python 的语法糖的作用,正是由于语法糖才使得python 有着很多的多样性!