python装饰器简单例子,python装饰器例子

  python装饰器简单例子,python装饰器例子

  闭包和装饰器的用处在我的另一篇文章中有简单的介绍。这里需要闭包和装饰器的知识

  使用@wraps(view_func)的作用:装饰的某些原始函数属性保持不变。例如,__name__,doc

  不使用包就可能发生的错误:view _ func…endpoint…map…

  下面是源码中要保留的原函数属性

  wrapper _ assignments=( _ _ module _ , __name__ , __qualname__ , __doc__ ,)

  def permission _ required(permission _ name):# #闭包第一层包括从装饰器传递来的变量" permission _ name def decorator " func)3360其中包含三层闭包以保存原始函数,实现了特定属性defdecorated_function ) args,**kwargs ) :#闭包的第三层。由装饰函数经营传递的变量如果不是当前用户。can(权限名称):#)在此,用户输入该权限abort(403)return func(args)* kwargs(return decorated _ function return decorator @ permission _ required(permission _ name )def manage)336666666

  #包装是经营函数,包装是新函数defupdate_wrapper(wrapper,wrapped,assigned=WRAPPER_ASSIGNMENTS,updated=WRAPPER _ UPDATES)3360 updateawwrapperfunctiontolooklikethewrappedfunctionwrapperistfunctionasigng signeddirectlyfromthewrappedfunctiontowrapperfunction(defaultstofunctiontools。WRAPPER _ a sign mment updatedisatulenameget date with the wrappedfunction(ols)的相应属性。WRAPPER _ UPDATES( for attributen assigned 3360 try 360值update)getattr)wrap at { })# issue # 174823360 set _ _ wrapped _ _ lastsowedon tinadvertentlycopyit # from the wrapped function updating _ ting returnthewrappersothiscanbe _ sed adapt返回包装器#纯函数,nodescriptorbehaviourdefpartial(func,*,args,* *关键字):# func是装饰_功能#偏函数 new functionwithpartialaapplicationofgivenarguments and keywords .func"":args=func。argsargsttmpkw=fargenargstmpkw ey words=tmpkwffff * * * f keywords(:new keywords=keywords。复制))新关键字。update(f keywords)return func(*)f keywords))neturn func将原始函数经营的某些属性和方法转换为包装材料的新功能。func=funcnewfunc。args=args newfunc。关键词=关键词。RAPPER_ASSIGNMENTS,updated=wrapper _ updates(:# wrapped是经营函数 decoratorfactorytoapplyupdate _ wrap pper)到wrapperfunctionreturnsadecoratorthatinvokesupdate _ wrapper ts。defaultargumentsareasforupdate _ wrapper(.thisisaconveniencefunctiontosimplify applying部分o更新_包装器(。)

  这也是三层闭包,

  @wraps(func)是函数包装(功能)最终得到的是wrap PS(partial)-new func)==wrapper,在调用函数时立即进行解码

  调用管理()时:首先执行包装器((-dedecorated _ function)-管理)的内容,因此包装) )函数中包含管理) )

  当然可以将装饰_功能. name _=管理代入装饰_功能中,但这样的完成显然很麻烦。

  此文只是自己的理解,仅供参考

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: