当前位置: 首页 > 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])# 判断文件夹是否存在
    

相关文章:

Python函数-装饰器

装饰器 写好的函数,不做任何修改,就可以改变执行内容,在其头或尾部加入新的流程代码本质上就是使用函数嵌套,在内部嵌套定义的函数中调用原函数,从而可读在前或后加入新的代码使用的关键: 将原函数作为参数…...

【数据可视化-17】基于pyecharts的印度犯罪数据可视化分析

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

HTTP请求报文头和相应报文头

一、HTTP请求报文头 HTTP请求报文由请求行、请求头和请求体组成。请求头包含客户端向服务器发送的附加信息。 1.1 请求行 格式: 方法 请求URI HTTP/版本示例: GET /index.html HTTP/1.1   方法: 请求类型,如GET、POST、PUT、DELETE等。   请求URI: 请求的资源…...

19.4.9 数据库方式操作Excel

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本节所说的操作Excel操作是讲如何把Excel作为数据库来操作。 通过COM来操作Excel操作,请参看第21.2节 在第19.3.4节【…...

BFS 走迷宫

#include<bits/stdc.h> using namespace std; int a[100][100],v[100][100];//访问数组 n,m<100 struct point {int x;int y;int step; }; queue<point> r;//申请队列 int dx[4]{0,1,0,-1};//四个方向 右下左上 int dy[4]{1,0,-1,0}; int main() { /* 5 4 1 …...

【Linux系统】—— 简易进度条的实现

【Linux系统】—— 简易进度条的实现 1 回车和换行2 缓冲区3 进度条的准备代码4 第一版进度条5 第二版进度条 1 回车和换行 先问大家一个问题&#xff1a;回车换行是什么&#xff0c;或者说回车和换行是同一个概念吗&#xff1f;   可能大家对回车换行有一定的误解&#xff0…...

Qt 中使用 SQLite 数据库的完整指南

SQLite 是一款轻量级、嵌入式的关系型数据库&#xff0c;无需独立的服务器进程&#xff0c;数据以文件形式存储&#xff0c;非常适合桌面和移动端应用的本地数据管理。Qt 通过 Qt SQL 模块提供了对 SQLite 的原生支持&#xff0c;开发者可以轻松实现数据库的增删改查、事务处理…...

数智化时代的工单管理:从流程驱动到数据驱动-亿发

在数智化时代&#xff0c;工单管理系统已从简单的任务分发工具演变为企业运营的智能中枢。传统工单系统关注流程的线性推进&#xff0c;而现代工单管理系统则强调数据的全生命周期管理&#xff0c;通过智能算法实现工单的自动分配、优先级判定和效能优化。这种转变不仅提升了运…...

Large Language Model Distilling Medication Recommendation Model

摘要&#xff1a;药物推荐是智能医疗系统的一个重要方面&#xff0c;因为它涉及根据患者的特定健康需求开具最合适的药物。不幸的是&#xff0c;目前使用的许多复杂模型往往忽视医疗数据的细微语义&#xff0c;而仅仅严重依赖于标识信息。此外&#xff0c;这些模型在处理首次就…...

floodfill算法系列一>被围绕的区域

目录 整体思想&#xff1a;代码设计&#xff1a;代码呈现&#xff1a; 整体思想&#xff1a; 代码设计&#xff1a; 代码呈现&#xff1a; class Solution {int m,n;int[] dx {0,0,-1,1};int[] dy {-1,1,0,0};public void solve(char[][] board) {m board.length;n board[…...

Redis 01 02章——入门概述与安装配置

一、入门概述 &#xff08;1&#xff09;是什么 Redis&#xff1a;REmote Dictionary Server&#xff08;远程字典服务器&#xff09;官网解释&#xff1a;Remote Dictionary Server(远程字典服务)是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;是一个高…...

windows基于cpu安装pytorch运行faster-whisper-large-v3实现语音转文字

1.创建虚拟环境 conda create -n faster-whisper python3.10 conda activate faster-whisper 2.安装cpu版本的pytorch pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple 3.验证pytorch安装结果 (faster-whisper) H:\big-model\faste…...

AI大模型(如GPT、BERT等)可以通过自然语言处理(NLP)和机器学习技术,显著提升测试效率

在软件测试中,AI大模型(如GPT、BERT等)可以通过自然语言处理(NLP)和机器学习技术,显著提升测试效率。以下是几个具体的应用场景及对应的代码实现示例: 1. 自动生成测试用例 AI大模型可以根据需求文档或用户故事自动生成测试用例。 代码示例(使用 OpenAI GPT API): …...

【Prometheus】prometheus黑盒监控balckbox全面解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...

CSS实现单行、多行文本溢出显示省略号(…)

在网页设计中&#xff0c;我们常常遇到这样的情况&#xff1a;文本内容太长&#xff0c;无法完全显示在一个固定的区域内。为了让界面看起来更整洁&#xff0c;我们可以使用省略号&#xff08;…&#xff09;来表示内容溢出。这不仅能提升用户体验&#xff0c;还能避免内容溢出…...

服务器中部署大模型DeepSeek-R1 | 本地部署DeepSeek-R1大模型 | deepseek-r1部署详细教程

0. 部署前的准备 首先我们需要足够算力的机器&#xff0c;这里我在vultr中租了有一张A16显卡一共16GB显存的服务器作为演示。部署的模型参数为14b的。如果需要部署满血版本671b的&#xff0c;需要更大的算力支持&#xff0c;这里由于是个人资金有限&#xff0c;就演示14b的部署…...

元学习之孪生网络Siamese Network

简介&#xff1a;元学习是一种思想&#xff0c;一般以神经网络作为特征嵌入的工具&#xff0c;实现对数据特征的提取&#xff0c;然后通过构造某种指标以引导优化器对模型参数进行优化。而最小化距离是最常见的学习目标&#xff0c;这就是熟知的度量学习&#xff0c;度量学习里…...

深入HBase——引入

引入 前面我们通过深入HDFS到深入MapReduce &#xff0c;从设计和落地&#xff0c;去深入了解了大数据最底层的基石——存储与计算是如何实现的。 这个专栏则开始来看大数据的三驾马车中最后一个。 通过前面我们对于GFS和MapReduce论文实现的了解&#xff0c;我们知道GFS在数…...

Python创建FastApi项目模板

1. 项目结构规范 myproject/ ├── app/ │ ├── core/ # 核心配置 │ │ ├── config.py # 环境配置 │ │ └── security.py # 安全配置 │ ├── routers/ # 路由模块 │ │ └── users.py # 用户路由 │ ├…...

TCNE 网络安全

一.概况 CTF&#xff08;Capture The Flag&#xff09;在网络安全领域中指的是网络技术人员之间进行技术竞技的一种比赛形式&#xff0c;它起源于1996年的DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式&#xff0c;现已成为全球范围网…...

华为CANN通信远端内存API

HcclChannelGetRemoteMems 【免费下载链接】hcomm HCOMM&#xff08;Huawei Communication&#xff09;是HCCL的通信基础库&#xff0c;提供通信域以及通信资源的管理能力。 项目地址: https://gitcode.com/cann/hcomm 产品支持情况 Ascend 950PR/Ascend 950DT&#xf…...

Keil µVision Display DLL技术解析与实战

1. Display DLL技术背景与核心价值 在嵌入式系统开发领域&#xff0c;调试实时操作系统(RTOS)状态信息一直是个技术痛点。传统调试方式往往需要开发者反复查看内存数据或通过串口打印日志&#xff0c;效率低下且容易遗漏关键状态变化。Keil Vision调试器提供的Display DLL接口&…...

GPT-4o图像生成实战:从提示词工程到五大核心场景应用

1. 从灵感仓库到创作引擎&#xff1a;GPT-4o图像生成实战全解析如果你和我一样&#xff0c;每天在社交媒体上刷到那些令人惊叹的AI生成图像&#xff0c;从Q版手办到赛博朋克微缩景观&#xff0c;从复古海报到未来主义名片&#xff0c;心里除了“哇塞”&#xff0c;可能还会冒出…...

基于MCP与AI智能体的深度网络研究自动化系统构建指南

1. 项目概述&#xff1a;当AI研究助手遇上“八边形”思维最近在折腾AI智能体&#xff08;Agent&#xff09;和工具调用&#xff08;Tool Calling&#xff09;的朋友&#xff0c;估计都绕不开一个词&#xff1a;MCP&#xff08;Model Context Protocol&#xff09;。简单来说&am…...

智能体工作流中如何实现多模型灵活切换与成本控制

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 智能体工作流中如何实现多模型灵活切换与成本控制 在构建复杂的智能体工作流时&#xff0c;开发者常常面临两个核心挑战&#xff1…...

Allegro软件许可浪费?自动释放,版图设计告别卡顿

别再让Allegro许可空转浪费钱了&#xff0c;2026年新方案直接解决卡顿痛点&#xff01;闲置许可&#xff0c;卡顿陷阱我司2026年某项目组就踩过这个坑&#xff1a;设计工程师临时离职&#xff0c;许可证没回收&#xff0c;两名新员工用着未授权的测试版本&#xff0c;团队干活像…...

STM32F103 学习笔记-21-串口通信(第5节)—串口2345代码移植和讲解

本章基于 STM32F103 标准外设库开发&#xff0c;从最基础的“串口是什么”讲起&#xff0c;通过生活化类比拆解硬件原理&#xff0c;配合逐行注释的可运行代码&#xff0c;让零基础读者读完就能实现单片机与电脑的双向通信。一、什么是串口通信&#xff1f;1.1 串口的本质&…...

Spring Boot项目初始化模板:开箱即用的企业级开发脚手架

1. 项目概述与核心价值最近在社区里看到不少朋友在讨论如何快速启动一个Spring Boot项目&#xff0c;特别是对于刚接触这个框架或者需要频繁创建新项目的团队来说&#xff0c;每次从零开始搭建脚手架、配置依赖、设计包结构&#xff0c;都是一件既耗时又容易出错的事情。我自己…...

终极视频PPT提取指南:3步将视频内容秒变PDF讲义

终极视频PPT提取指南&#xff1a;3步将视频内容秒变PDF讲义 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 还在为从冗长视频中手动截图PPT而烦恼吗&#xff1f;&#x1f914; 今天我…...

KEEBOX LIST™:开发者资源聚合清单的设计、使用与维护实践

1. 项目概述&#xff1a;一个为开发者打造的“工具箱”清单 如果你和我一样&#xff0c;在软件开发的日常里&#xff0c;经常需要为某个特定任务寻找合适的工具、库或者一份靠谱的教程&#xff0c;那你肯定也经历过那种在搜索引擎和无数个浏览器标签页之间反复横跳的“信息过载…...