python装饰器

刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,才有点点开始明白了。

待会我将会和大家一起通过代码的形式来迷你银行存款取款的功能,然后通过引入装饰器来一步一步优化代码。

废话不多说梦开始撸代码。我们去ATM存款取款的过程用代码来表示大概如下(不大准确,仅仅是为了掩饰需要)

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

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

可以看到,虽然实现了密码验证功能,但是代码冗余度比较高,而且现在只模拟了取款和存款功能,然而还有查询功能,转账功能等等,那么冗余度就更高了,而且相对于取款和存款函数来说,复用性没有那么高,所以我们要进一步优化代码,把验证函数写到取款和存款函数内部。最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以联系维:762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

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

[图片上传失败…(image-809991-1636537599985)]

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

装饰器装饰有参函数

看下面这段代码

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

运行结果

看报错原因就知道,inner()函数多了一个参数。大家一定要注意一点,因为装饰器函数的返回值是inner,也就是说现在myprint是等同于inner的。最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可以联系维:762459510 ,那个真的很不错,很多人进步都很快,需要你不怕吃苦哦!大家可以去添加上看一下~

我们来改一下代码

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

装饰器装饰有返回值函数

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

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

双重语法糖

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

我先来定义一个函数

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

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

我们来运行一下就知道了

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

带参数的语法糖

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

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

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

最后小编多说一句!小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

这是我见过最全面的Python装饰器详解 没有学不会这种说法相关推荐

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

    python装饰器 刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,才有点点开始明白了. 学习python中有什么不懂的地方,小编这 ...

  2. python装饰器作用和功能_这是我见过最全面的Python装饰器详解!没有学不会这种说法!...

    今天的任务比较繁重,因为我们要一起来学习Python中比较重要比较牛逼比较难的装饰器. 我将会和大家一起通过代码的形式来迷你银行存款取款的功能,然后通过引入装饰器来一步一步优化代码. 废话不多说梦开始 ...

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

    今天的任务比较繁重,因为我们要一起来学习Python中比较重要比较牛逼比较难的装饰器. 我将会和大家一起通过代码的形式来迷你银行存款取款的功能,然后通过引入装饰器来一步一步优化代码. 废话不多说梦开始 ...

  4. python中的类装饰器应用场景_这是我见过最全面的Python装饰器教程了!

    装饰器(Decorators)是 Python 的一个重要部分.简单地说:他们是修改其他函数的功能的函数.他们有助于让我们的代码更简短,也更Pythonic(Python范儿).在程序开发中经常使用到 ...

  5. Python 装饰器详解(下)

    Python 装饰器详解(下) 转自:https://blog.csdn.net/qq_27825451/article/details/84627016,博主仅对其中 demo 实现中不适合pyth ...

  6. Python 装饰器详解(中)

    Python 装饰器详解(中) 转自:https://blog.csdn.net/qq_27825451/article/details/84581272,博主仅对其中 demo 实现中不适合pyth ...

  7. Python 装饰器详解(上)

    Python 装饰器详解(上) 转自:https://blog.csdn.net/qq_27825451/article/details/84396970,博主仅对其中 demo 实现中不适合pyth ...

  8. python类装饰器详解-Python 装饰器详解

    开放封闭原则: 开放对扩展 封闭修改源代码 改变了人家调用方式 装饰器结构 """ 默认结构为三层!!!每层返回下一层内存地址就可以进行执行函数, 传参:语法糖中的传参可 ...

  9. python装饰器详解51-python装饰器使用实例详解

    这篇文章主要介绍了python装饰器使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python装饰器的作用就是在不想改变原函数代码的情 ...

最新文章

  1. inline-block空隙怎么解决
  2. Kaggle大牛小姐姐自述:我是怎么成为竞赛中Top 0.3%的 | 干货攻略
  3. Python之路---------printinput
  4. 一起学nRF51xx 0 - 环境搭建
  5. 1.18 static的常见问题和使用误区
  6. java 线程 操作系统线程_线程基础:线程(1)——操作系统和线程原理
  7. ielts speaking questions
  8. 关于SQL Server 数据 出现(可疑)不可用状态的解决办法
  9. nginx 安装_安装Nginx的几种方式
  10. 一点一点学习Ubuntu
  11. 基于stm32的智能家居语音控制系统
  12. kong翻译_最全的中国姓氏英文说法,你知道自己的姓氏怎么翻译吗?
  13. 路由器的级联(LAN-WAN)
  14. 最近五年中秋节后第一天涨幅前十个股在此 沪深三七开 更多规律你来找
  15. iPhone 导入照片显示时间不是拍摄时间
  16. G-002 波峰焊与回流焊的区别
  17. Java应用系列之Pinyin4j简单使用教程
  18. 网易考拉API接口测试
  19. Linux发展历史大事编年表(截止2013年)
  20. 国产网络损伤仪SandStorm -- 基本概念:什么是仿真引擎

热门文章

  1. [gtest][002] A quick start to build the Google C++ Testing project
  2. 天锋w2019_天锋W2019叫板三星,三星欲哭无泪,网友称这也太逼真了!
  3. 累计增量备份策略_数据安全与备份解决方案ZDLRA快速恢复
  4. 克隆后 mysql uuid_mysql主从复制失败(uuid)
  5. php中的rand,php rand() 随机数生成的方法介绍
  6. Python 找出1与100之间的全部“同构数”
  7. oracle select之后自动保存excel_Excel制作自动化仓库入库单,数据录入、计算、保存只需一键完成...
  8. The J2EE Architect's Handbook讀書筆記(一)
  9. Windows下tomcat进程监控批处理程序
  10. 注解实现json序列化的时候自动进行数据脱敏