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
高潮来了:还是以上的代码,看代码我们发现,代码这里的home和bbs认证方式是一样的,都是开头定义好的,但是在真正的实际环境里,网页的认证有很多种,ssh,加密,密钥认证等,甚至在同一组网页中,每一个网页的认证方式可能都不一样。这里假设Home和bbs的认证方式不一样,那应该如何修改装饰器来适应变化呢?
这需要添加的东西就比较多了,先看添加完后的代码
图的解释就不细说了(文字描述太多),这里最好实践一下,然后加上断点,一步步走一遍就明白了
到此python装饰器大致就了解并可以运用了,还有很多方式,一切都是以工作中遇到的问题来对应想办法解决
最新文章
- 关于opengl库
- JS实现表格的增删改
- Docker实践(6)—CentOS7上部署Kubernetes
- 才知道百度也提供了智能DNS服务 - 加速乐
- FileReader 的了解
- Lua function 函数
- PHP之路——VC库
- Java基础之参数传递
- 精华【分布式、微服务、云架构、dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!
- 文本处理三剑客之sed
- (九十六)借助APNS实现远程通知、后台任务
- XSS(跨站脚本攻击)漏洞解决方案
- PAT A1033 To Fill or Not to Fill (25 分)——贪心
- GUI and Usability Test Scenarios
- 【Darwin学习笔记】之TaskThread
- ubantu 黑屏
- VC中明明已经添加了头文件却还提示未定义的问题
- WAV文件格式解析及处理
- packert tracer配置路由器
- RMAN兼容性列表