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


更多参考:

​廖雪峰的官方网站-python-装饰器​

​官方文档 PEP 318 -- Decorators for Functions and Methods​


以上是关于Python @修饰符示例理解的主要内容,如果未能解决你的问题,请参考以下文章

FINDC() 中的“k”修饰符在 SAS 中如何工作?

python装饰器@

SwiftUI内功之深入理解Padding

如何理解Vue的.sync修饰符的使用

Java 访问权限修饰符以及protected修饰符的理解

在这个代码示例中我应该给一个变量啥修饰符?