编程学习笔记之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深入之装饰器案例及说明文档[图]相关推荐

  1. Noah的学习笔记之Python篇:装饰器

    Noah的学习笔记之Python篇: 1.装饰器 2.函数"可变长参数" 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.co ...

  2. Socket网络编程学习笔记 (10)简易聊天室案例

    1. 聊天室数据传输设计 必要条件:客户端.服务器 必要约束:数据传输协议 原理:服务器监听消息来源.客户端链接服务器并发送消息到服务器 1.1 客户端.服务器数据交互 client 发送消息到服务器 ...

  3. python的messagebox的用法_Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解...

    本文实例讲述了Python GUI编程学习笔记之tkinter中messagebox.filedialog控件用法.分享给大家供大家参考,具体如下: 相关内容: messagebox 介绍 使用 fi ...

  4. 大数据第二阶段Python基础编程学习笔记(待完善)

    大数据第二阶段Python基础编程学习笔记(待完善) 第一章 Python基础语法 3.8 1-1Python概述 python基础部分: ●Python基础语法: 标识符,关键字,变量,判断循环.. ...

  5. python高级语法装饰器_Python高级编程——装饰器Decorator超详细讲解上

    Python高级编程--装饰器Decorator超详细讲解(上篇) 送你小心心记得关注我哦!! 进入正文 全文摘要 装饰器decorator,是python语言的重要特性,我们平时都会遇到,无论是面向 ...

  6. 2021-11-16派森编程学习笔记“上帝视角下的游戏操盘手” 通过类的继承学会了复用代码,减少代码冗余,提高编程效率。

    派森编程学习笔记"上帝视角下的游戏操盘手" [自学笔记] 继承 在Python中继承是指:在类的基础上,它可以实现现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩 ...

  7. 学习笔记之——Python中类和对象的理解

    学习笔记之--Python中类和对象的理解 面向对象的含义和特性 类 Python中类的定义.结构.创建 Python类的定义 Python类的结构 类的创建 类的属性 类的方法 对象 对象的创建 参 ...

  8. 【C#8.0 and .NET Core 3.0 高级编程学习笔记】

    @C#8.0 and .NET Core 3.0 高级编程学习笔记 前言 为了能精细地完成对C#语言的学习,我决定选择一本书,精读它,理解它,记录它.我想选择什么书并不是最重要的,最重要的是持之以恒的 ...

  9. 《Linux Shell编程学习笔记之一》

    <Linux Shell编程学习笔记之一> 前言 由于自己一直在Windows上面编程,用linux用的比较少,学习linux还是本科大二学的一点点知识.因此自己就准备花点时间来熟悉下li ...

最新文章

  1. pandas使用isna函数和any函数检查dataframe是否包含缺失值、整体是否有缺失值,不区分行列(check if dataframe contains any missing values
  2. 服务器自动关机怎么查,怎样设置WIN7系统的自动关机和查询系统上次的关机时间?...
  3. android语音播放工具类,Android开发之MediaPlayer多媒体(音频,视频)播放工具类
  4. 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】PowerPC + Linux2.6.25平台下的I2C驱动架构分析
  5. GROUP BY 子句中 选择列表中的列无效,因为该列没有包含在聚合函数或
  6. django 1.8 官方文档翻译:7-2 管理操作
  7. radiobutton模拟tab点击效果
  8. Opencv笔记(二十一)——傅里叶变换
  9. html返回顶部代码(简单)
  10. Telerik UI for Xamarin使用教程 - AndroidX使用指南
  11. 计算机控制系统模型,控制系统数学模型及其类型-电脑自学网
  12. WPF的网易云音乐页面
  13. 解决win10系统alt+tab切换程序不显示程序缩略图问题
  14. 软件工程实训项目(一)——IDEA连接Mysql数据库
  15. 【Linux os7】--详细搭建LAMP+安装Zabbix4监控服务
  16. MATLAB对水下目标去噪声代码,水下目标噪声与背景噪声的建模与仿真
  17. 用mg格式制作产品动画有什么优势?
  18. python 实现MR
  19. python将数字转换为中文_Python:将数字转换为文字
  20. Vue前端模板框架--vue-admin-template

热门文章

  1. 示波器x1档与x10档的区别
  2. 计算机网络知识可视化,(完整版)可视化方法与技术
  3. java使用MD5进行不可逆加密
  4. 推送系统从0到1(一):是系统不是工具
  5. C/C++实现球球大作战(高仿版),全源码分享带你轻松完成
  6. 字符串中如何删除一个字符
  7. 迷你php框架,PHP 开源框架 MiniFramework 发布 2.0.0 版
  8. 业务架构_业务架构TOGAF建模系列:业务足迹图
  9. show databases没有任何数据库出现,mysql的使用
  10. 又一个偏执狂发的帖子