编程学习笔记之python深入之装饰器案例及说明文档[图]
编程学习笔记之python深入之装饰器案例及说明文档[图]
装饰器即在不对一个函数体进行任何修改,以及不改变整体的原本意思的情况下,增加函数功能的新函数,因为这个新函数对旧函数进行了装饰,所以称为装饰器。装饰器的主要依据是闭包,这里用一个案例来说明装饰器的作用:
(1)客户需要写一个通过选择不同按钮来实现发说说和发图片操作的程序,基本框架如下:
# 函数功能
# 发说说函数
def fss():
print("发说说")
# 发图片函数
def ftp():
print("发图片")
# 业务执行代码
buttom = 2
if buttom == 1:
fss()
else:
ftp()
(2)这个时候,客户发来需求说在发说说或发图片之前要用户登录,则在框架中要加入用户登录功能。而在对业务代码进行修改时有三个需要遵循的规则:1.不要随意在业务执行代码中修改代码,因为代码的应用场景很多,如果在业务执行代码中修改代码,那么每个场景中都要进行修改,工作量大;2.写好的函数功能不要随意增删,这样会违背“单一职责”原则,即一个函数只实现一个功能;3.不要随意增加新的函数,这样会导致要在业务执行代码中写入该函数,违背第一条规则。根据以上三条规则,将上述代码修改如下:
# 函数功能
# 装饰器
def checkLogin(func):
def inner():
print("请登录...")
func()
return inner
# 发说说函数
def fss():
print("发说说")
fss = checkLogin(fss)
# 发图片函数
def ftp():
print("发图片")
ftp = checkLogin(ftp)
# 业务执行代码
buttom = 2
if buttom == 1:
fss()
else:
ftp()
即加入装饰器,其中利用函数名和变量名性质相同,将装饰器返回的函数重新赋值给相应的函数名,欧也妮葛朗台读书笔记(http://www.simayi.net/dushubiji/6609.html)摘抄好词好句及感悟赏析,从而避免修改业务执行代码。
(3)python给出一种装饰器的简化形式,即语法糖。这里装饰器的语法糖即@装饰器名,并放在要装饰的函数前即可,最终代码如下:
# 函数功能
# 装饰器
def checkLogin(func):
def inner():
print("请登录...")
func()
return inner
# 发说说函数
@checkLogin
def fss():
print("发说说")
# 发图片函数
@checkLogin
def ftp():
print("发图片")
# 业务执行代码
buttom = 2
if buttom == 1:
fss()
else:
ftp()
这里需要注意的是,使用语法糖后,装饰器的代码会在被装饰函数之前执行,这是装饰器的执行时间问题。
编程学习笔记之python深入之装饰器案例及说明文档[图]相关推荐
- Noah的学习笔记之Python篇:装饰器
Noah的学习笔记之Python篇: 1.装饰器 2.函数"可变长参数" 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.co ...
- Socket网络编程学习笔记 (10)简易聊天室案例
1. 聊天室数据传输设计 必要条件:客户端.服务器 必要约束:数据传输协议 原理:服务器监听消息来源.客户端链接服务器并发送消息到服务器 1.1 客户端.服务器数据交互 client 发送消息到服务器 ...
- python的messagebox的用法_Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解...
本文实例讲述了Python GUI编程学习笔记之tkinter中messagebox.filedialog控件用法.分享给大家供大家参考,具体如下: 相关内容: messagebox 介绍 使用 fi ...
- 大数据第二阶段Python基础编程学习笔记(待完善)
大数据第二阶段Python基础编程学习笔记(待完善) 第一章 Python基础语法 3.8 1-1Python概述 python基础部分: ●Python基础语法: 标识符,关键字,变量,判断循环.. ...
- python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上
Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...
- 2021-11-16派森编程学习笔记“上帝视角下的游戏操盘手” 通过类的继承学会了复用代码,减少代码冗余,提高编程效率。
派森编程学习笔记"上帝视角下的游戏操盘手" [自学笔记] 继承 在Python中继承是指:在类的基础上,它可以实现现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩 ...
- 学习笔记之——Python中类和对象的理解
学习笔记之--Python中类和对象的理解 面向对象的含义和特性 类 Python中类的定义.结构.创建 Python类的定义 Python类的结构 类的创建 类的属性 类的方法 对象 对象的创建 参 ...
- 【C#8.0 and .NET Core 3.0 高级编程学习笔记】
@C#8.0 and .NET Core 3.0 高级编程学习笔记 前言 为了能精细地完成对C#语言的学习,我决定选择一本书,精读它,理解它,记录它.我想选择什么书并不是最重要的,最重要的是持之以恒的 ...
- 《Linux Shell编程学习笔记之一》
<Linux Shell编程学习笔记之一> 前言 由于自己一直在Windows上面编程,用linux用的比较少,学习linux还是本科大二学的一点点知识.因此自己就准备花点时间来熟悉下li ...
最新文章
- linux 脚本 ,shell中的与
- linux内核报告,Linux升级内核报告.docx
- echarts 堆叠树状图排序
- Linux下使用Nexus搭建Maven私服
- .NET Core实战项目之CMS 第三章 入门篇-源码解析配置文件及依赖注入
- php 取经纬度,php根据地址获取百度地图经纬度的实例方法
- TypeScript 类(Class)
- 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第1节 异常_13_自定义异常类...
- python如何删除代码_删除代码(上)
- LinGo基本用法总结
- 只用最适合的!全面对比主流 .NET 报表控件
- 宝峰c1对讲机写频软件_宝峰写频软件-宝峰对讲机写频软件 附USB线驱动 7.01 官方版 - 河东下载站...
- matlab双因素模型,matlab双因素方差分析
- 解决以太网IPv4无网络访问权限
- “139邮箱”练好内功比发电影票更重要
- 地磅系统连不上云端服务器,LiteCMS云称重管理系统
- HTML5仿苹果Siri动画js特效
- 网易云音乐关键字搜索并生成下载url
- 视频H265格式压缩,软件压缩方法,硬件的没有条件,没法测试。
- laravel 5.6 请教邮件中的cc,bcc是什么意思,有什么用?