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

Python之装饰器二 带参数的装饰器

  • 前言
  • 一、带参数的装饰器
  • 二、在装饰器里面传入参数
  • 总结


前言

暂无


一、带参数的装饰器

我们知道,不带参数的装饰其实就是在函数的头上添加装饰器时放一个名称,这种写法就默认了装饰器函数调的是被装饰函数自己,换句话说就是,大家一致认同的这种规则了,@装饰器 这种表示法就是要调被装饰函数自己。

那么这种表示是在一层闭包实现的,那么有2层闭包又实现了什么呢?

答:两层闭包就实现了装饰器带参数。

# 装饰器带参数
import time
from functools import wrapsdef my_timer(parm):def timer(func):@wraps(func)def decorate(*args, **kwargs):if parm == 1:print("这是func1")start_time = time.time()func(*args, **kwargs)end_time = time.time()total = end_time - start_timeprint("函数运行时间:", total)elif parm == 2:print("这是func2")start_time = time.time()func(*args, **kwargs)end_time = time.time()total = end_time - start_timeprint("函数运行时间:", total)return decoratereturn timer@my_timer(2)  # 装饰器带参数
def func1():time.sleep(2)func1()

那我们分析一下,当我们使用一层闭包的时候,在外面被装饰的函数的头上只放一个装饰器函数。

举例:

我们现在就一层闭包(在这里只是演示,实际上这个代码是跑不起来的),一层闭包的写法和在函数头上的写法前面的知识已经解释过了。

假设第二层闭包能够用的情况下,那么在函数头上的表现是:

二、那么如果要在装饰器里面传入参数怎么做呢?

那就直接在一层的闭包外,再加一层闭包,这一层闭包的作用就是用来传参数的,说的通俗一点,就是用来放置外来的参数,这个参数用于里面的闭包。虽然外层的闭包只起了这样的作用,主要的逻辑还是在里面的闭包,不过呢,我们在使用这个闭包的时候,还是要使用外层的函数名,不然我们怎么传入参数呢?


总结

暂无

http://www.lryc.cn/news/540580.html

相关文章:

  • rk3588/3576板端编译程序无法运行视频推理
  • 静态库与动态库区别
  • 鸿蒙-Canvas-图片滑动验证
  • Python应用算法之贪心算法理解和实践
  • 网络运维学习笔记 017HCIA-Datacom综合实验01
  • C++(17):为optional类型构造对象
  • Maven导入hutool依赖报错-java: 无法访问cn.hutool.core.io.IORuntimeException 解决办法
  • Simulink库浏览器中有大量的模型组件工具箱介绍
  • 从0到1:固件分析
  • 模电知识点总结(6)
  • 【Java学习】多态
  • Oracle 深入理解Lock和Latch ,解析访问数据块全流程
  • 什么是事务?并发事务引发的问题?什么是MVCC?
  • 【JavaEE进阶】MyBatis通过注解实现增删改查
  • Uptime Kuma实现业务接口自定义逻辑监控
  • 基于 JavaWeb 的 Spring Boot 调查问卷管理系统设计和实现(源码+文档+部署讲解)
  • 新手小白学习棒球规则·棒球1号位
  • 单元测试的策略有哪些,主要包括什么?
  • 深度学习之图像回归(一)
  • Docker 替换到 Containerd (nerdctl相关指令)
  • Ollama API 参考文档
  • PHP房屋出租出售高效预约系统小程序源码
  • 学习threejs,使用MeshBasicMaterial基本网格材质
  • Kafka Connect 功能介绍
  • 从卡顿到丝滑:火山引擎DeepSeek-R1引领AI工具新体验
  • Vulnhub-node靶机教学
  • php处理图片出现内存溢出(Allowed memory size of 134217728 bytes exhausted)
  • 网络IP跳动问题解决详
  • Linux firewalld 常用命令
  • LeetCode 热题 100 49. 字母异位词分组