首页 > 编程知识 正文

python3,python语法糖和装饰器

时间:2023-05-03 17:04:56 阅读:112553 作者:4519

我很久以前就看过装饰器的使用方法和功能,但是自己平时编程的时候很少使用这些高级的使用方法。 今天,当我看到别人开源的efficientDet源代码时,很多地方都在用装饰品,一时想不起来具体的作用,于是又在百度上学习了。 现在用我个人的理解来总结,以便以后在复习下被遗忘。

首先,装饰器是python的强大功能,也是动态编程的特点。

首先,我们知道在python中,一个函数作为参数传递给另一个函数。

defhi(:return'hiyasoob!' defdosomethingbeforehi(func ) :打印(iamdoingsomeboringworkbeforeexecutinghi () ) (print ) func ) ) dosomethinghing 以下装饰器的使用方法是“装饰一个函数”调用此被装饰的函数作为装饰器的参数

importfunctoolsdefitcast1(fun ) : # #带参数的装饰器definner ) args,**kwargs ) :打印) itcast 1开始' (fun ) args, * kwargs (打印(itcast 1结束) ) return inner @ itcast1def say_hello ) ) :打印(say_ hello ) )打印(say _ ) hello 因为名称是装饰器的返回函数,并且直接调用inner函数,所以输出调用的顺序类似于inner中的顺序。 这样做可以大大简化我们的代码。 写下装饰器的功能,直接装饰成其他函数就可以了。

接下来看看warp吧。 其作用主要是维护原始函数的名称、doc的属性。

importfunctoolsdefitcast1(fun ) :@functools.wraps ) fun ) definner ) args, **kwargs ) :打印) itcast1staaast * kwargs (打印(a (itcast1end ) )返回输入@ itcast1def say_hello ) a ) :打印(say _ hello ) )打印(a )打印

如果我们装饰的函数有返回值,我们想得到这个返回值。 用inner放回去就行了。 以下:

importfunctoolsdefitcast1(fun ) :@functools.wraps ) fun ) definner ) args, **kwargs ) :打印) itcast1staaast * kwargs (打印(a (itcast1end ) ) returnareturninner @ itcast1def Say_Hello ) a ) :打印(say _ hello ) ) print(a 对于使用rt say _ hello1itcast1end1@ property,主要角色是将类中的函数作为类的属性调用进行详细查看

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。