python装饰器
Posted 雾霾1024
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python装饰器相关的知识,希望对你有一定的参考价值。
一.开闭原则
对功能拓展的开放
对代码修改的封闭 可以更好的维护和开发
二.装饰器
1.个人理解:装饰器就是把原来需要修改的函数修改好,重新给赋值(赋值成原来的名字).名字一样功能增加,但是只能在之前或者之后加功能
2.意义:
在不破坏原有函数和原有函数调用的基础上,给函数添加新功能(python里的动态代理)
3.通用装饰器的写法:
def warrper(fn): # 调用目标函数 def inner(*args,**kwargs): # 在inner里加功能 接收到的是元组 """在调用函数之前加入功能""" ret = fn(*args,**kwargs) # ret 是接收目标函数的返回值 打散传给形参 """在调用函数之后加入功能""" return ret # 返回调用的目标函数返回值 保证函数正常结束 return inner @warrper # 语法糖,等价于 target_fn = warrper(target_fn) def target_fn(): pass
三.带参的装饰器
1.带参的装饰器就是给装饰器加个开关,参数就是开关.
2.带参装饰器写法:
def warrper_out(flag): # 装饰器本身的参数 def warrper(fn): #目标函数 def inner(*args,**kwargs): if flag == True: print("问问行情") ret = fn(*args,**kwargs) print("骗人") return ret else: ret = fn(*args, **kwargs) return ret return inner return warrper @warrper_out(True) # 语法糖 @装饰器 def yue(): print("走 约") yue()
四.多个装饰器修饰同一个函数
多个装饰器修饰同一个函数取就近 一层一层
# def warpper0(fn): # def inner(*args,**kwargs): # print("111") # ret = fn(*args,**kwargs) # print("222") # return ret # return inner # # def warpper1(fn): # def inner(*args,**kwargs): # print("333") # ret = fn(*args,**kwargs) # print("444") # return ret # return inner # # def warpper2(fn): # def inner(*args,**kwargs): # print("555") # ret = fn(*args,**kwargs) # print("666") # return ret # return inner # # # # @warpper0 # 折返 # @warpper1 # @warpper2 # def func(): # print("我是func") # # func() # 0 1 2 func 2 1 0 先用2装饰 再用1 再用0
以上是关于python装饰器的主要内容,如果未能解决你的问题,请参考以下文章