当前位置: 首页 > wzjs >正文

都匀网站.asp 网站

都匀网站,.asp 网站,互联网营销课程体系,与网站建设相关的论文题目浙大疏锦行 DAY 27 函数专题2:装饰器 ps:第一期day27对应5月16日 知识点回顾: 1.装饰器的思想:进一步复用 2.函数的装饰器写法 3.注意内部函数的返回值 作业: 编写一个装饰器 logger,在函数执行前后…

@浙大疏锦行

DAY 27 函数专题2:装饰器

ps:第一期day27对应5月16日

知识点回顾:

1.装饰器的思想:进一步复用

2.函数的装饰器写法

3.注意内部函数的返回值

 

作业:

编写一个装饰器 logger,在函数执行前后打印日志信息(如函数名、参数、返回值)

@logger

def multiply(a, b):

    return a * b

 

multiply(2, 3)  

# 输出:

# 开始执行函数 multiply,参数: (2, 3), {}

# 函数 multiply 执行完毕,返回值: 6

 

本期内容如果无法理解,可以参考如下视频教学

https://www.bilibili.com/video/BV11s411V7Dt/?spm_id_from=333.337.search-card.all.click&vd_source=d95393f33b679c1250a26a5dfa6fd6f2

 


豆包:

以下是用生活场景比喻解释装饰器相关知识点,帮你秒懂这个「代码魔术」:

 

1. 装饰器的思想:给函数「穿外套」的复用艺术

 

本质:在不修改原函数代码的前提下,给函数「添加额外功能」,就像给衣服缝上口袋、给蛋糕加奶油。

核心目的:避免重复写相似代码(比如多个函数都需要「日志记录」功能),实现代码复用。

 

比喻:

 

- 装饰器 = 礼物包装纸

 

- 原函数 = 「礼物本身」(比如一本书)。

 

- 装饰器 = 「包装纸+蝴蝶结」(给礼物增加「美观」功能)。

 

- 关键规则:不能拆开礼物修改内容(不修改原函数代码),但可以在外面套包装。

 

生活场景举例:

 

- 原函数  read_book()  是「看书」,装饰器可以是「记录看书时间」的功能:

python

def 记录时间(原函数): # 装饰器函数,参数是原函数

    def 包装函数():

        print("开始时间:2025-06-10 10:00")

        原函数() # 调用原函数(看书)

        print("结束时间:2025-06-10 11:00")

    return 包装函数

 

@记录时间 # 用装饰器包装函数

def read_book():

    print("正在阅读《Python入门》")

 

read_book() # 调用时会自动触发装饰器的「记录时间」功能

 

 

输出:

plaintext

开始时间:2025-06-10 10:00

正在阅读《Python入门》

结束时间:2025-06-10 11:00

 

 

2. 函数装饰器的写法:三步搭出「包装流水线」

 

写法模板(以Python为例):

 

1. 定义装饰器函数:接收原函数作为参数。

 

2. 定义内部包装函数:在原函数前后添加新功能。

 

3. 返回包装函数:用  @装饰器名  语法糖应用到目标函数。

 

比喻拆解:包装礼物的流水线

 

python

# 1. 定义「包装纸」函数(装饰器)

def 包装纸(礼物): # 礼物=原函数

    # 2. 定义「包装过程」函数(内部函数)

    def 包礼物():

        print("✨ 放上丝带") # 新增功能1

        礼物() # 调用原礼物(不修改原内容)

        print("🎀 贴上祝福卡片") # 新增功能2

    # 3. 返回「包装好的礼物」

    return 包礼物

 

# 用装饰器包装「送书」函数

@包装纸 # 等价于 send_book = 包装纸(send_book)

def send_book():

    print("📚 送出《Python书》")

 

# 调用包装后的函数

send_book()

 

 

执行效果:

 

plaintext

✨ 放上丝带

📚 送出《Python书》

🎀 贴上祝福卡片

 

 

3. 注意内部函数的返回值:别让礼物「消失在包装里」

 

常见错误:如果内部函数不返回原函数的结果,原函数的返回值会丢失(就像把礼物放进盒子却不装进去,最后送出空盒子)。

 

比喻对比:

 

- 正确做法:包装礼物时必须把「礼物本身」放进盒子,否则收礼人拿到的是空盒子。

 

- 错误做法:包装时只放包装纸,没放礼物,结果丢失了礼物。

 

代码示例:

 

python

# ❌ 错误写法:内部函数不返回原函数结果

def 错误装饰器(原函数):

    def 包装函数():

        print("开始装饰")

        原函数() # 调用原函数,但没保存结果

        print("装饰结束")

    return 包装函数

 

@错误装饰器

def get_gift():

    return "钻石戒指" # 原函数返回一个值

 

result = get_gift()

print(result) # 输出:None(原函数的返回值丢失了!)

 

 

# ✅ 正确写法:必须返回原函数的调用结果

def 正确装饰器(原函数):

    def 包装函数():

        print("开始装饰")

        gift = 原函数() # 保存原函数的返回值

        print("装饰结束")

        return gift # 返回原函数的结果

    return 包装函数

 

@正确装饰器

def get_gift():

    return "钻石戒指"

 

result = get_gift()

print(result) # 输出:钻石戒指(结果正确传递)

 

 

终极比喻总结:装饰器是「函数的变装皇后」

 

表格

装饰器要素 生活比喻 核心作用 

原函数 素颜的人 原本的功能主体 

装饰器函数 造型师 负责给函数「化妆」(添加功能) 

内部包装函数 化妆过程 在原功能前后插入新操作 

@装饰器语法 造型师的「魔法咒语」 一键应用变装效果 

必须返回原结果 化妆不能改变人的本质 装饰后必须保留原函数的返回值 

 

通过「包装礼物」的比喻,可以直观理解装饰器的「无侵入式增强」特性——就像我们不会为了系蝴蝶结而拆开礼物盒,装饰器也不会修改原函数的代码,却能让函数「穿上新功能的外衣」,实现高效复用~ 🎁

 

 

 

 


代码:

def logger(func):

    def wrapper(*args, **kwargs):

        # 打印函数执行前的日志

        print(f"开始执行函数: {func.__name__}")

        print(f"位置参数: {args}")

        print(f"关键字参数: {kwargs}")

        

        # 执行原函数

        result = func(*args, **kwargs)

        

        # 打印函数执行后的日志

        print(f"函数 {func.__name__} 执行完毕")

        print(f"返回值: {result}")

        

        return result

    return wrapper

 

# 示例函数,用于测试装饰器

@logger

def add_numbers(a, b):

    return a + b

 

# 调用示例函数

add_numbers(3, 5)

 

 

 

 


文章转载自:

http://LQr2U6b3.ybgdL.cn
http://XkbzKptX.ybgdL.cn
http://EMN1xvYl.ybgdL.cn
http://LMIcOhyg.ybgdL.cn
http://V0Mb3TDl.ybgdL.cn
http://fgqAedAg.ybgdL.cn
http://VfskbHw1.ybgdL.cn
http://XvuL3qb2.ybgdL.cn
http://6xwr7VRX.ybgdL.cn
http://YbFfXr0p.ybgdL.cn
http://LLcN3k4C.ybgdL.cn
http://KVxhezqO.ybgdL.cn
http://5TvCJRxy.ybgdL.cn
http://LfkswVEV.ybgdL.cn
http://DSIerlF2.ybgdL.cn
http://OB5F6lWk.ybgdL.cn
http://lD76nW3k.ybgdL.cn
http://NEi52WBc.ybgdL.cn
http://IR0vtDi2.ybgdL.cn
http://2ur7b40P.ybgdL.cn
http://0mpEwvEK.ybgdL.cn
http://ToZSc3FN.ybgdL.cn
http://xYYx4LzH.ybgdL.cn
http://dnvcMPy6.ybgdL.cn
http://5SuSYNcH.ybgdL.cn
http://CfuYsSTi.ybgdL.cn
http://Yb0yhP0Q.ybgdL.cn
http://UdJfGtTm.ybgdL.cn
http://Kwg8eRlw.ybgdL.cn
http://5EHEdksp.ybgdL.cn
http://www.dtcms.com/wzjs/699707.html

相关文章:

  • 网站宽度 像素无锡网站建设详细内容
  • 网站引导页的作用网站建设前期开发
  • 贵州省城乡和建设厅网站首页淘宝网站的推广与优化
  • 烟台网站制作步骤个人电子邮件注册网站申请
  • 安徽网新科技有限公司网站开发百度下载安装到桌面
  • 济南建设工程备案网站崇左市城市投资建设有限公司网站
  • 建设网站的协议范本中国菲律宾签证免签吗
  • 临沂网站建设小程序怎么做网站端口代理
  • 专业网站设计专家四川企业网站模板步骤
  • 做家政网站上海公司注册地址可以是住宅吗
  • 海外建站流程做电影网站最牛的站长是谁
  • 招商网站建设优势国家免费技能培训
  • 上海协会网站建设无锡网站优化哪家快
  • 小红书推广群天津seo培训
  • html5商业网站开发北大青鸟企业网站制作的市场
  • 佛山做网站的公司wap网
  • 找人开发一个网站多少钱做网站哪种编程语言好
  • 运城住房和建设局网站wordpress有一个100的缩略图
  • 学校网站建设经验介绍网站开发教材
  • 深圳网站设计收费标准什么是网站建设公司
  • 网站跳出率计算安徽合肥发现1例阳性
  • 宁波正规品牌网站设计WordPress清除ID沉余
  • 做网站什么的好做网站 智域大连
  • 秦皇岛 网站建设创意+wordpress主题
  • 网站维护一般需要多久广西水利工程建设管理网站
  • 网站开发教程公司wordpress登录修改
  • 唐山建设集团下岗职工网站网站备案失效
  • 网站文章删除了怎么做404项目推广平台有哪些
  • 吉林市做网站怎么用腾讯云服务器做网站
  • 网站介绍流程网站新开怎么做营销