上面是按下按钮1就存款,否则则取款。

不对,存取款要输入密码啊!!!所以,我们要加密码验证代码。

进群:125240963   即可获取数十套PDF哦!

可以看到,虽然实现了密码验证功能,但是代码冗余度比较高,而且现在只模拟了取款和存款功能,然而还有查询功能,转账功能等等,那么冗余度就更高了,而且相对于取款和存款函数来说,复用性没有那么高,所以我们要进一步优化代码,把验证函数写到取款和存款函数内部。

有没有什么方法,可以在不改变原函数以及原函数的调用的情况下扩展原函数的功能呢?当然是有的,这就是python中著名的装饰器。还是使用上面的代码来演示

从现在开始,上面红框的代码不再进行更改,打死也不改,我们来实现有密码验证的存取款功能。

装饰器装饰有参函数

看下面这段代码

大家看看这段代码有没有什么问题?

运行结果

看报错原因就知道,inner()函数多了一个参数。大家一定要注意一点,因为装饰器函数的返回值是inner,也就是说现在myprint是等同于inner的。

我们来改一下代码

为了使装饰器能够装饰更多函数,我们进一步优化代码。

装饰器装饰有返回值函数

如图可以看到,无论被装饰的函数有无返回值,其结果都无返回值,原因其实很简单,因为inner()函数根本就没有返回值。为了实现有返回值的函数被装饰之后仍然有返回值,需要inner函数与被装饰函数的返回值保持一致。

可以看到,有返回值的函数被装饰之后依然有返回值,没有返回值的函数被装饰之后则没有返回值,符合我们想要的结果。

双重语法糖

为了更加直观地演示双重语法糖,我就不再使用上面的例子了。

我先来定义一个函数

现在我有一个需求,我想在'python小白联盟'的上面打印一行'='和一行'*',也就是要实现这种效果。

那么应该怎么写呢?大家可能都会想到语法糖的叠加,那叠加的方式是以下哪一种呢?

我们来运行一下就知道了

可以看到,叠加的方式应该是第一种,也就是说最外层的语法糖先执行。

带参数的语法糖

为了演示带参数的语法糖,我再把上面的一张图搬下来

显然,红框部分的代码冗余度比较高,我们可以使用带参的语法糖来进行简化

装饰器就讲到这里,祝大家有个愉快的一天!

python装饰器不错的教程相关推荐

  1. Python装饰器最经典教程,以最易理解的方式教会你

    ##开场白 什么是装饰器? 装饰器: 定义:本质是函数,是用来装饰其他函数,就是为其他函数添加附加功能 原则:1.不能修改被装饰函数的源代码 2.不能修改被装饰的调用方式 装饰器有什么用? 如果这写函 ...

  2. Python装饰器详解,详细介绍它的应用场景

    装饰器的应用场景 附加功能 数据的清理或添加: 函数参数类型验证 @require_ints 类似请求前拦截 数据格式转换 将函数返回字典改为 JSON/YAML 类似响应后篡改 为函数提供额外的数据 ...

  3. 不懂Python装饰器?教程双手奉上!

    1.必备 #### 第一波####def foo(): print('foo')foo #表示是函数foo() #表示执行foo函数 #### 第二波 ####def foo(): print('fo ...

  4. 装饰器python3菜鸟教程_认识Python装饰器

    Python中的装饰器用来给Python中的函数添加一些辅助功能.比如我们可以把[输出日志]这个辅助功能写到一个装饰器里.只要我们在某个函数A之前添加了这个[输出日志]的装饰器,那么执行函数A的时候, ...

  5. python装饰器使用教学,Python教程|简单上手Python中装饰器的使用

    如何打造极简主义风格网站教程 .极简主义与其他设计风格<极简主义设计之美> 这篇文章的一部分是讲极简主义是如何与其他设计风格很好配合的.可以把极简主义当作一种属性,而它可以添加或结合其他. ...

  6. python中装饰器的使用教程详解(wraps)

    先看下面的函数简单理解一下 示例代码: import loggingdef use_logging(func):logging.error("%s is running" % fu ...

  7. 一份来自 StackOverflow 的最佳 Python 装饰器教程

    (给Python开发者加星标,提升Python技能) 翻译:可乐,校对:艾凌风 发布:Python开发者(id:PythonCoder) 注意: 这是一篇 StackOverflow 上的问题回答,因 ...

  8. python lock_python lock一步步教你理解Python装饰器

    请仔细看我们的decorator实例.我们定义了一个接受单个参数some_func的名为outer的函数.在outer内部我们定义了一个名为inner的嵌套函数.inner函数打印一个字符串然后调用s ...

  9. 这是我见过最全面的Python装饰器详解 没有学不会这种说法

    python装饰器 刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,才有点点开始明白了. 待会我将会和大家一起通过代码的形式来迷你银 ...

最新文章

  1. ffmpeg 压缩视频
  2. spring in action 读书笔记
  3. golang errors 取 错误 信息_Golang 单元测试:有哪些误区和实践?
  4. python_递归原理
  5. .net 数字转汉字_收藏!小学生汉字拼音学习工具。
  6. 学了python能干啥举例-django能干什么
  7. Java or PHP? 谈谈高并发网站的技术选型和架构设计
  8. 【5G核心网】5GC核心网之网元UDR
  9. 几个大的车载开源平台
  10. 阿里、腾讯、知乎裁员 那些被裁的程序员怎么办?
  11. 怎么设置计算机升级更新失败怎么办,windows update更新失败怎么办,教您windows update更新失败怎么办...
  12. thinkadmin开源框架获取添加信息的主键id
  13. Linux的软件包封装格式有,RED HAT LINUX所提供的安装软件包,默认的打包格式为( )。...
  14. ibm量子计算机蓝图,IBM 量子技术扩展蓝图
  15. Swift 4 放大镜功能实现
  16. 更正:解决报告无法下载的问题-跟国家虚拟仿真实验平台对接上传附件接口遇到的问题
  17. 略胜知云?适合大学生的一款文献翻译神器,网页版工具
  18. 误删暂存代码的恢复方法
  19. viper4android耳机爆音,利用ViPER4Android FX音效驱动提升耳机音质
  20. Three.js实战--修改OrbitControls的按键

热门文章

  1. 如何用MobaXterm查看日志信息以及xml
  2. Dubbo关于timeout等相关配置的优先级
  3. 一个动态增长的栈实现
  4. [leetcode] Reverse Integer 反转一个整数
  5. sql 如何设置行级锁_如何使用SQL Server 2016行级安全性过滤和阻止数据访问
  6. sql while循环_SQL WHILE循环的简单示例
  7. sql server 入门_SQL Server中的数据挖掘入门
  8. 19-6/24作业: 将一个double类型的小数,按照四舍五入保留两位小数
  9. 如何用WinCC发送报警消息至钉钉
  10. 解决li在ie,firefox中行高不一致问题