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

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


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

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

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


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

最新文章

  1. 关于opengl库
  2. JS实现表格的增删改
  3. Docker实践(6)—CentOS7上部署Kubernetes
  4. 才知道百度也提供了智能DNS服务 - 加速乐
  5. FileReader 的了解
  6. Lua function 函数
  7. PHP之路——VC库
  8. Java基础之参数传递
  9. 精华【分布式、微服务、云架构、dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!
  10. 文本处理三剑客之sed
  11. (九十六)借助APNS实现远程通知、后台任务
  12. XSS(跨站脚本攻击)漏洞解决方案
  13. PAT A1033 To Fill or Not to Fill (25 分)——贪心
  14. GUI and Usability Test Scenarios
  15. 【Darwin学习笔记】之TaskThread
  16. ubantu 黑屏
  17. VC中明明已经添加了头文件却还提示未定义的问题
  18. WAV文件格式解析及处理
  19. packert tracer配置路由器
  20. RMAN兼容性列表

热门文章

  1. Mysql数据库基础第七章:流程控制结构
  2. PHP 网页 apache24+php8 yii basic
  3. html原声启动本地服务器,用http-server启动本地服务器
  4. WebSocket 基本使用
  5. TypeScript 学习之路
  6. ElasticSearch (Es) 分组查询 记录
  7. unctfWP
  8. appium遇到的问题
  9. VMware Workstation 未能启动VMware Authentication Service
  10. URLDecoder.decode() 特殊字符的处理