最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

python多个装饰器的调用顺序

来源:动视网 责编:小采 时间:2020-11-27 14:26:44
文档

python多个装饰器的调用顺序

python多个装饰器的调用顺序:前言装饰器是程序开发中经常会用到的一个功能,也是python语言开发的基础知识,如果能够在程序中合理的使用装饰器,不仅可以提高开发效率,而且可以让写的代码看上去显的高大上^_^使用场景可以用到装饰器的地方有很多,简单的举例如以下场景引入日志函数执行
推荐度:
导读python多个装饰器的调用顺序:前言装饰器是程序开发中经常会用到的一个功能,也是python语言开发的基础知识,如果能够在程序中合理的使用装饰器,不仅可以提高开发效率,而且可以让写的代码看上去显的高大上^_^使用场景可以用到装饰器的地方有很多,简单的举例如以下场景引入日志函数执行


前言

装饰器是程序开发中经常会用到的一个功能,也是python语言开发的基础知识,如果能够在程序中合理的使用装饰器,不仅可以提高开发效率,而且可以让写的代码看上去显的高大上^_^

使用场景

可以用到装饰器的地方有很多,简单的举例如以下场景

  • 引入日志

  • 函数执行时间统计

  • 执行函数前预备处理

  • 执行函数后清理功能

  • 权限校验等场景

  • 缓存

  • 装饰器案例

    def user_login(fun):
     def islogin(request,*args,**kwargs):
     context = {}
     if request.session.has_key('uname'):
     context['uname'] = request.session.get('uname')
     else:
     context['uname'] = 'None'
     return fun(request,context,*args,**kwargs)
     return islogin

    @user_login
    def ucOrder(request,context,pIndex):
     '''
     获取数据
     处理数据
     传递到页面上去

    以上是一个简单电商应用中使用装饰器的案例,其中 ucOrder函数是是用户需要登录后才能被执行到的。如果不使用装饰器的话,普通的做法可能是在 ucOrder中写一堆校验代码来判断用户是否登录,然后决定后面的执行逻辑,这样比较麻烦。

    那么使用装饰器之后就比较简单了,只需要按照装饰器的使用格式,在ucOrder函数上面加上@user_login,那么python解释器在运行的时候,就会从上到下解释代码,先执行user_login函数,并且将ucOrder作为user_login函数的参数传入进去,即等价于user_login(ucOrder),这样就起到了一个校验用户是否登录,从而决定是否执行ucOrder函数的功能

    多个装饰器使用的调用顺序

    def one(func):
     print('----1----')
     def two():
     print('----2----')
     func()
     return two
    
    def a(func):
     print('----a----')
     def b():
     print('----b----')
     func()
     return b
    
    @one
    @a
    def demo():
     print('----3----')
    
    demo()

    执行结果:

    /usr/bin/python2.7 /home/python/Desktop/tornadoProject/one.py
    ----a----
    ----1----
    ----2----
    ----b----
    ----3----

    可以从执行结果中看到,如果是使用多个装饰器,它的执行顺序还是有点怪异的的,为什么会这样呢?

    关于这个问题,有更好的文章可以解释,Python 装饰器执行顺序迷思

    更多python 多个装饰器的调用顺序相关文章请关注PHP中文网!

    文档

    python多个装饰器的调用顺序

    python多个装饰器的调用顺序:前言装饰器是程序开发中经常会用到的一个功能,也是python语言开发的基础知识,如果能够在程序中合理的使用装饰器,不仅可以提高开发效率,而且可以让写的代码看上去显的高大上^_^使用场景可以用到装饰器的地方有很多,简单的举例如以下场景引入日志函数执行
    推荐度:
    标签: 顺序 python 装饰的
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top