zoukankan      html  css  js  c++  java
  • python装饰器中高级用法(函数加参)

      在上一章我们说到装饰器的原则和基本用法,下面来补充一下:如果函数加参,装饰器该如何变化

    1,还是用上一章的源代码

    2,给test2加个参数name

     报错了,本来给test2加一个name参数,为了实现“li”能成功添加到test2里,按一般添加函数的方法没有错,但是报错显示没有“li”这个参数值。忽略了函数在被调用到装饰器里发生了什么变化

    2,修改装饰器,让装饰器调用到test2的参数

     还是报错了,仔细看,当我们在添加了装饰器中函数值后,按正常思路走,test2的name值应该也会被

    f() 和 d()调用才对,其实是对的,如下

    3,将test1注释掉,因为上图报错显示test1没有参数

     这时候只输出test2,发现添加参数成功,是的,这样其实就是成功了,但是问题来了,如果一个程序里有的函数需要加参数,有的函数不需要加参数,那怎么弄?如果是这样的话,就会出现 2 步骤中的报错

    4,在装饰器里用“ * ” 号来针对不加参和加参的混合应用

     这里我们在 agr 前加上 * 号 ,再次运行,发现test1没有报错了。加“*” 号 其实就是为了函数的混合用法

                               (结合上一篇博客,装饰器这样的应用,其实已经满足日常百分之九十的工作了)


    下面要说一个高级用法

      例子:公司有很多的网站页面需要输入操作,我们在python里,用一个函数代表一个页面来完成

    如图:

     运行后:

     这是没有用到会话,只是直观的体现,这样的方式网上有很多种,这种方式可以说是经典之作

    *********补充:如果home函数有返回值,装饰器需做返回结果的修改,如下图**********

     执行后:

    OK


      高潮来了:还是以上的代码,看代码我们发现,代码这里的homebbs认证方式是一样的,都是开头定义好的,但是在真正的实际环境里,网页的认证有很多种,ssh,加密,密钥认证等,甚至在同一组网页中,每一个网页的认证方式可能都不一样。这里假设Home和bbs的认证方式不一样,那应该如何修改装饰器来适应变化呢?

    这需要添加的东西就比较多了,先看添加完后的代码

     图的解释就不细说了(文字描述太多),这里最好实践一下,然后加上断点,一步步走一遍就明白了


      到此python装饰器大致就了解并可以运用了,还有很多方式,一切都是以工作中遇到的问题来对应想办法解决

  • 相关阅读:
    DNS智能双向解析怎么做?
    高防服务器如何选择性价比最高?
    20192416 实验四《Python程序设计》综合实践报告
    20192416实验三 《Python程序设计》实验报告
    20192416 《Python程序设计》实验二报告
    20192416 《Python程序设计》实验一报告
    2019-2020-1学期 20192416《网络空间安全专业导论》第十二周学习总结
    2019-2020-1学期 20192416《网络空间安全专业导论》第十一周学习总结
    2019-2020-1学期 20192416《网络空间安全专业导论》第十周学习总结
    2019-2020-1学期 20192416《网络空间安全专业导论》第九周学习总结
  • 原文地址:https://www.cnblogs.com/123456likun/p/14067908.html
Copyright © 2011-2022 走看看