首页技术文章正文

Python培训:什么是装饰器?

更新时间:2022-09-30 来源:黑马程序员 浏览量:

IT培训班

  编者之前在知乎上看到一个很形象的比喻来描述装饰器,它是这么说的:

  “内裤可以用来遮羞,但是到了冬天没法为我们防风御寒,聪明的人发明了长裤,有了长裤后就不会冷了。装饰器就像是这里说的长裤,在不影响内裤作用的前提之下,给我们的身体提供了保暖的功效。”

  读完上面的句子,不知道大家有没有体会到装饰器的好处?好了,我们言归正传,我们开始装饰器的学习吧。

  装饰器本质是一个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内部进行修改的。

分享到:
在线咨询 我要报名