python装饰器(披着羊皮的狼),,python装饰器的
python装饰器(披着羊皮的狼),,python装饰器的
python装饰器的作用是在不改变原有函数的基础上,对函数的功能进行增加或者修改。
装饰器语法是python语言更加优美且避免很多繁琐的事情,flask中配置路由的方式便是装饰器。
首先python中一个函数也是可以当做一个对象进行传递的。
1 def sheep(f): 2 def she(): 3 print("I‘m a sheep") 4 return f() 5 return she 6 7 @sheep 8 def wolf(): 9 print("I‘m a wolf")10 11 if __name__ == "__main__":12 wolf()
输出结果为
I‘m a sheepI‘m a wolf
上面代码相当于
wolf = sheep(wolf)wolf()
带参数的装饰器
1 def change(a): 2 def sheep(f): 3 def she(): 4 print("I‘m a sheep") 5 f() 6 print("you‘re not ,you‘re {} sheep".format(a)) 7 return she 8 return sheep 9 10 @change("fake")11 def wolf():12 print("I‘m a wolf")13 14 if __name__ == "__main__":15 wolf()
结果:
I‘m a sheepI‘m a wolfyou‘re not ,you‘re fake sheep
相当于
wolf = change("fake")(wolf)wolf()
其实函数名发生是发生了改变会发现
wolf.__name__的值为she
解决办法为
1 import functools 2 3 def change(a): 4 def sheep(f): 5 @functools.wraps(f) 6 def she(): 7 print("I‘m a sheep") 8 f() 9 print("you‘re not ,you‘re {} sheep".format(a))10 return she11 return sheep12 13 def wolf():14 print("I‘m a wolf")15 16 if __name__ == "__main__":17 wolf = change("fake")(wolf)18 wolf()
python装饰器(披着羊皮的狼)
评论关闭