更新时间:2022-09-30 来源:黑马程序员 浏览量:
编者之前在知乎上看到一个很形象的比喻来描述装饰器,它是这么说的:
“内裤可以用来遮羞,但是到了冬天没法为我们防风御寒,聪明的人发明了长裤,有了长裤后就不会冷了。装饰器就像是这里说的长裤,在不影响内裤作用的前提之下,给我们的身体提供了保暖的功效。”
读完上面的句子,不知道大家有没有体会到装饰器的好处?好了,我们言归正传,我们开始装饰器的学习吧。
装饰器本质是一个Python函数,它可以在不改动其他函数的前提下,对函数的功能进行扩充。通常情况下,装饰器用于下列场景:
(1)引入日志;
(2)函数执行时间统计;
(3)执行函数前预备处理;
(4)执行函数后清理功能;
(5)权限校验;
(6)缓存。
先看一个简单的例子。
def test_one(): print('test_one')
现在有一个需求,希望可以输出函数的执行日志,这时,有人会这么实现:
def test_one(): print('test_one') print('test_one is running') test_one()
但是,如果函数test_two()、函数test_three()都有类似的需求,那么现在这样的做法会出现大量重复代码。为了减少重复的代码,我们可以创建一个新的函数专门记录函数执行日志,谁需要记录执行日志,就把谁作为参数传递,示例代码如下:
def print_log(func): print('函数正在运行中') func() def test(): print('test') print_log(test)
按照上述代码将函数作为参数传递,虽然可以实现功能,但是却破坏了原有代码的逻辑结构。如果要求已经实现的函数,不能修改,只能扩展,即遵守“封闭开放”原则,那么是不允许在函数test内部进行修改的。
【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19【AI大模型开发-Python】毕业33个工作日,就业率已达到94.55%,班均薪资20763元
2025-09-19【AI智能应用开发-Java】毕业5个工作日就业率98.18%,最高薪资 17.5k*13薪,全班平均薪资9244元
2025-09-19