Python @修饰符示例理解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python @修饰符示例理解相关的知识,希望对你有一定的参考价值。
python 中当某个函数已经存在了,想在函数前执行相应的操作,但又不希望改掉原函数的定义,利用修饰符(Decorator)可实现该功能。
一个基本的函数,可以直接执行调用,或者赋予变量再调用:
class TEST:
def func(self):
print("func")
if __name__ == "__main__":
t = TEST()
t.func() #print
f = t.func #函数赋予给变量
f() #print
执行结果:
func
func
现在增加一个函数 funa,每次执行原函数 func 时,都会通过 funa 执行。再增加一个函数 fund ,看看修饰符调用的是什么函数。
class TEST:
def funa(fu):
def wrapper(*args, **kw): #适用于任意变量
print(call %s(): % fu.__name__)
return fu(*args, **kw)
return wrapper
@funa #修饰符类似执行:func = funa(func)
def func(self):
print("func")
def fund(self,fn):
print(fun name : %s() % fn.__name__)
if __name__ == "__main__":
t = TEST()
t.func()
t.fund(t.func) #查看函数名
执行结果:
call func():
func
fun name : wrapper()
再来个更简洁的事例:
class TEST:
def funa(fn):
def testa(arg):
print("funa")
fn(arg)
return testa
def funb(fn):
def testb(arg):
print("funb")
fn(arg)
return testb
@funa
@funb
def func(self): #func = funa(funb(func))
print("func")
@funb
def fund(self): #func = funb(fund)
print("fund")
if __name__ == "__main__":
t = TEST()
t.func()
t.fund()
执行结果:
funa
funb
func
funb
fund
更多参考:
官方文档 PEP 318 -- Decorators for Functions and Methods
以上是关于Python @修饰符示例理解的主要内容,如果未能解决你的问题,请参考以下文章