python 装饰器原理_Python学习笔记之装饰器原理

本文介绍了Python装饰器的工作原理,通过示例展示了如何使用装饰器封装公共代码,如询价和购买成功提示。装饰器允许在不修改原有函数内部的情况下,为函数添加额外的功能。此外,还提到了使用@decorator语法糖简化装饰器应用,以及装饰器接受可变参数和关键字参数的可能性,以适应不同函数的需求。装饰器在函数复用和扩展性方面起到了关键作用。
摘要由CSDN通过智能技术生成

1 defdecorator(fn):2 defwrapper():3 print("询价")4 fn()5 print("购买成功!")6

7 returnwrapper8

9

10 defapple():11 print("购买苹果")12

13

14 deforange():15 print("购买橘子")16

17

18 defpotato():19 print("购买土豆")20

21

22 ap =decorator(apple)23 ap()24

25 ora =decorator(orange)26 ora()27

28 po =decorator(potato)29 po()

运行结果

1160467-20180929101039351-933658874.png

(1) 装饰器相当于使用闭包函数封装公共部分的函数:

在decorator函数中, 定义一个闭包函数 wrapper, 而wrapper函数内部除了输出公共部分print("询价") print("购买成功!")

(2) decorator装饰器传入形参fn作为函数返回

参数fn传入装饰器后, 在闭包函数内部作为函数调用fn()

切记: wrapper作为闭包函数,必须返回

(3) 自定义不同函数 apple, orange, potato ...,作为实参传入装饰器

2 . 赋值给变量

ap = decorator(apple)

1 . 调用

ap()

(4)修改

直接在函数上方使用@decorator就可以调用装饰器,无需再将赋值给变量

调用函数即可

1 defdecorator(fn):2 defwrapper():3 print("询价")4 fn()5 print("购买成功!")6

7 returnwrapper8

9

10 @decorator11 defapple():12 print("购买苹果")13

14

15 @decorator16 deforange():17 print("购买橘子")18

19

20 @decorator21 defpotato():22 print("购买土豆")23

24 #ap = decorator(apple)

25 #ap()

26 #27 #ora = decorator(orange)

28 #ora()

29 #30 #po = decorator(potato)

31 #po()

32 apple()33 orange()34 potato()

(5)添加可变参数

由于调用的函数参数是不固定的,所以传入装饰器的参数必须是可变参数 *args ,其中args是自定义的,可根据实际情况改为具有实际意义的变量

1160467-20180929110753134-1052458253.png

1160467-20180929110809911-372513589.png

(6)添加关键字参数:**kwargs中的kwargs可自定义

1160467-20180929113329210-285916761.png

1160467-20180929113355287-1772405218.png

(5)总结

装饰器的作用其实就是封装复用的代码,并且可以将新增的公共代码写在装饰器中,避免了在函数内部扩展代码。秉承了函数的封闭性和开放性,即对修改是封闭的,对扩展是开放的 , 需要在装饰器传入可变参数和关键字参数,调用的函数才能传参。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值