• Python学习基础笔记七十六——Python装饰器2


    装饰器,英文名字decorator。

    我们开发Python代码的时候,经常碰到装饰器。

    通常被装饰后的函数,会在原来的函数的基础上,增加一些功能。

    通常装饰器本事也是一个函数,那么装饰器是怎么装饰另外一个函数的呢?

    假设,你进入一家公司,领导要求你在老代码的基础上继续开发。

    1. import time
    2. def getXXXTime():
    3. return time.strftime('%Y_%m_%d %H:%M:%S',time.localtime())

    1. import time
    2. # 定义一个装饰器函数
    3. def sayLocal(func):
    4. def inner():
    5. ret = func()
    6. return f'当地时间: {ret}'
    7. return inner
    8. def getXXXTime():
    9. return time.strftime('%Y_%m_%d %H:%M:%S',time.localtime())
    10. # 装饰getXXXTime()
    11. getXXXTime = sayLocal(getXXXTime)
    12. print(getXXXTime())

     

    我们再看下之前的装饰器的通用模板:

    1. def wrapper(f): # 装饰器wrapper
    2. def inner(*args, **kwargs):
    3. '''在装饰前要做的事情'''
    4. ret = f(*args, **kwargs) # 被装饰的函数
    5. '''在装饰后要做的事情'''
    6. return ret
    7. return inner
    8. @wrapper # 装饰器函数名
    9. def func(a, b): # 被装饰的函数

    1. import time
    2. # 定义一个装饰器函数
    3. def sayLocal(func):
    4. def inner():
    5. ret = func()
    6. return f'当地时间: {ret}'
    7. return inner
    8. @sayLocal
    9. def getXXXTime():
    10. return time.strftime('%Y_%m_%d %H:%M:%S',time.localtime())
    11. # 装饰getXXXTime()
    12. # getXXXTime = sayLocal(getXXXTime)
    13. print(getXXXTime())

    sayLocal函数是一个装饰器,它装饰了参数函数的行为。

    以@sayLocal开头后面接装饰器函数的这种写法,是一种语法糖,也就是便捷的写法。

    装饰器经常被用在库和框架中,给别的开发者使用。

    这些库的开发者预料到 使用者 开发的函数可能需要 一些增强的功能。

    但是 这些库的开发者 没法去改使用者的代码, 就可以把这些增强的部分做在 装饰器函数中。

    这样使用者,只需要在他们的函数前面上@xxx 就使用了这些增强的功能了。

    开放封闭原则:

    1)多拓展是开放的;

    2)对修改是封闭的;

    目的是维护代码的稳定性,这个就是装饰器存在的意义。

  • 相关阅读:
    Vue3 Vite electron 开发桌面程序
    couldn‘t find “libopencv_java3.so“
    【分布式金融交易模型】账户开立
    Zabbix技术分享——使用Zabbix监控系统日志文件大小
    Prometheus+Grafana监控
    【vivo秋招0912】三、最少开发工时总和 <模拟>
    Python 提取PDF文本和图片
    Go语言进阶,interface接口,socket套接字
    如何使用 Git 进行多人协作开发(全流程图解)
    kubernetes-pod的更新策略与回滚策略
  • 原文地址:https://blog.csdn.net/chang_chunhua/article/details/133941067