当前位置: 首页 > news >正文

Python函数-装饰器

  • 装饰器

    • 写好的函数,不做任何修改,就可以改变执行内容,在其头或尾部加入新的流程代码
    • 本质上就是使用函数嵌套,在内部嵌套定义的函数中调用原函数,从而可读在前或后加入新的代码
    • 使用的关键:
      • 将原函数作为参数传递一个新函数
      • 在这个新函数内部定义一个嵌套函数,这个嵌套函数内容把外部函数的参数,也就是原函数执行一遍
      • 将这个嵌套函数在新函数中返回
      • 也就是让原函数指向一个新的函数
      • 看起来好像还是在调用原函数,实际上原函数的名字(也就是指向)已经指代了一个新函数
      • 疑问:装饰器似乎不可避免地引起参数多次复制式传递
    def outer(origin):""" comment """def inner(*args, **kwargs):# 添加新的流程代码ret = origin(*args, **kwargs);# 添加新的流程代码return retreturn inner@outer
    def fun01(*args, **kwargs):#流程代码pass
    # 相当于fun01 = outer(fun01)
    print(outer.__name__)# 正常打印outer这个函数名字,是字符串
    print(outer.__doc__)# 正常打印outer这个函数注释,如commentprint(fun01.__name__)# 由于装饰器的存在,会输出装饰器名字,本例中为inner
    print(fun01.__doc__)# 由于装饰器的存在,会输出装饰器inner中的注释
    # 出现这样的现象,是很正常的,但如果想要获取原始fun01的名字与注释的话,要添加新注释器在inner前面import functools
    def outer(origin):@functools.wraps(origin)# 新增此行,作用是重指inner.__name__ = origin.__name__; inner.__doc__ = origin.__doc__def inner(*args, **kwargs):""" comment """# 添加新的流程代码ret = origin(*args, **kwargs);# 添加新的流程代码return retreturn innerimport os
    os.path.dirname(path)# 提取path中的文件夹名称
    path.rsplit("/", 1)[0]# 将path中文件名去除,只保留文件夹名称
    os.path.exists(path.rsplit("/", 1)[0])# 判断文件夹是否存在
    
http://www.lryc.cn/news/536880.html

相关文章:

  • 【数据可视化-17】基于pyecharts的印度犯罪数据可视化分析
  • HTTP请求报文头和相应报文头
  • 19.4.9 数据库方式操作Excel
  • BFS 走迷宫
  • 【Linux系统】—— 简易进度条的实现
  • Qt 中使用 SQLite 数据库的完整指南
  • 数智化时代的工单管理:从流程驱动到数据驱动-亿发
  • Large Language Model Distilling Medication Recommendation Model
  • floodfill算法系列一>被围绕的区域
  • Redis 01 02章——入门概述与安装配置
  • windows基于cpu安装pytorch运行faster-whisper-large-v3实现语音转文字
  • AI大模型(如GPT、BERT等)可以通过自然语言处理(NLP)和机器学习技术,显著提升测试效率
  • 【Prometheus】prometheus黑盒监控balckbox全面解析与应用实战
  • CSS实现单行、多行文本溢出显示省略号(…)
  • 服务器中部署大模型DeepSeek-R1 | 本地部署DeepSeek-R1大模型 | deepseek-r1部署详细教程
  • 元学习之孪生网络Siamese Network
  • 深入HBase——引入
  • Python创建FastApi项目模板
  • TCNE 网络安全
  • 车规MCU处理器选择Cortex-M7还是Cortex-R52?
  • 什么是计算机中的 “终端”?
  • LeetCode刷题---字符串---819
  • SSH IBM AIX服务器相关指标解读
  • Wireshark TS | 再谈虚假的 TCP Spurious Retransmission
  • 基于kafka、celery的日志收集报警项目
  • QML使用ChartView绘制饼状图
  • 头歌实验--面向对象程序设计
  • DeepSeek-R1 蒸馏 Qwen 和 Llama 架构 企业级RAG知识库
  • App UI自动化--Appium学习--第二篇
  • 【SpringBoot实现全局API限频】 最佳实践