找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 9167|回复: 5

编程学习笔记之python深入之装饰器案例及说明文档[图]

[复制链接]
  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:10
  • 最近打卡:2023-06-13 20:58:02
     
荆楚不肖生 发表于 2018-7-22 23:29 | 显示全部楼层 |阅读模式 来自 中国–湖北–宜昌 电信

赶紧注册,享受更多功能!查看帖内大图!

您需要 登录 才可以下载或查看,没有账号?立即注册

×
编程学*笔记之python深入之装饰器案例及说明文档[图]
装饰器即在不对一个函数体进行任何修改,以及不改变整体的原本意思的情况下,增加函数功能的新函数,因为这个新函数对旧函数进行了装饰,所以称为装饰器。装饰器的主要依据是闭包,这里用一个案例来说明装饰器的作用:
(1)客户需要写一个通过选择不同按钮来实现发说说和发图片操作的程序,基本框架如下:

编程学习笔记之python深入之装饰器案例及说明文档[图]

编程学习笔记之python深入之装饰器案例及说明文档[图]
# 函数功能
# 发说说函数
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()
即加入装饰器,其中利用函数名和变量名性质相同,将装饰器返回的函数重新赋值给相应的函数名,欧也妮葛朗台读书笔记摘抄好词好句及感悟赏析,从而避免修改业务执行代码。
(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()
这里需要注意的是,使用语法糖后,装饰器的代码会在被装饰函数之前执行,这是装饰器的执行时间问题。

百姓地盘、草根平台!(点击修改为自己的签名)客服QQ:139725796
  • 打卡等级:偶尔看看
  • 打卡总天数:11
  • 打卡月天数:8
  • 打卡总奖励:1295
  • 最近打卡:2025-12-17 18:21:33
     
年轻就是资本 发表于 2018-7-23 10:11 | 显示全部楼层 来自 中国–湖北–宜昌 电信
小手一抖,金币拿走。
百姓地盘、草根平台!(点击修改为自己的签名)客服QQ:139725796
回复

使用道具 举报

  • 打卡等级:即来则安
  • 打卡总天数:16
  • 打卡月天数:11
  • 打卡总奖励:1384
  • 最近打卡:2025-12-18 16:17:35
     
荆山野女 发表于 2018-7-23 15:00 | 显示全部楼层 来自 中国–湖北–宜昌 电信
姐顶的不是寂寞,是楼主的帖!
百姓地盘、草根平台!(点击修改为自己的签名)客服QQ:139725796
回复

使用道具 举报

  • 打卡等级:即来则安
  • 打卡总天数:16
  • 打卡月天数:11
  • 打卡总奖励:1354
  • 最近打卡:2025-12-18 16:18:13
     
子非鱼 发表于 2018-7-23 15:00 | 显示全部楼层 来自 中国–湖北–宜昌 电信
赞一个!
百姓地盘、草根平台!(点击修改为自己的签名)客服QQ:139725796
回复

使用道具 举报

  • 打卡等级:即来则安
  • 打卡总天数:16
  • 打卡月天数:11
  • 打卡总奖励:1449
  • 最近打卡:2025-12-18 16:20:47
     
冰凌儿 发表于 2018-7-24 17:21 | 显示全部楼层 来自 中国–湖北–宜昌 电信
百姓地盘、草根平台!(点击修改为自己的签名)客服QQ:139725796
回复

使用道具 举报

  • 打卡等级:即来则安
  • 打卡总天数:15
  • 打卡月天数:10
  • 打卡总奖励:1320
  • 最近打卡:2025-12-18 16:22:05
     
心里无交过 发表于 2018-7-24 17:21 | 显示全部楼层 来自 中国–湖北–宜昌 电信
赞!
百姓地盘、草根平台!(点击修改为自己的签名)客服QQ:139725796
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|认证|简介|联系我们|赤脚网 ( 鄂ICP备18015422号|42052502000021 )

GMT+8, 2025-12-18 22:22

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

网站内容仅代表网友个人观点,非本站认同之观点!删帖请用删帖卡,或在申请版块发帖申请,或联系【 bbs@yalj.net 】我们会尽快处理。
声明:严禁任何人以任何形式在本站发表与中华人民共和国法律相抵触的言论!
技术管理:远安坤哥    主办单位:远安县临沮网信息管理中心
                   
快速回复 返回顶部 返回列表