码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 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)对修改是封闭的;

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

  • 相关阅读:
    化工供应链如何向产业互联网转型,S2B2C供应链电商系统提升企业供应链效率
    vue-cli + APIcloud
    react native中使用Animated实现三张图片动态旋转效果
    【机器学习】特征工程:从理论到实践的关键技巧
    浏览器工作原理与实践--浏览上下文组:如何计算Chrome中渲染进程的个数
    学生学python编程---实现贪吃蛇小游戏+原码
    (笔记整理未完成)【数据结构】树状数组
    Qt打包程序
    PX4开发环境搭建--模拟器编译
    java反射所需要了解的基本知识点
  • 原文地址:https://blog.csdn.net/chang_chunhua/article/details/133941067
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号