Python自定义装饰器原理与用法实例分析
作者:喷跑的豆子 发布时间:2023-01-19 05:12:06
本文实例讲述了Python自定义装饰器原理与用法。分享给大家供大家参考,具体如下:
什么是装饰器?装饰器本质是一个函数,它可以在不改变原来的函数的基础上额外的增加一些功能。如常见的@classmethod,@staticmethod等都是装饰器,接下来记录下如何自定义个装饰器:
刚刚说过了,装饰器的本质就是一个函数,所有想要自定义一个装饰器,首先自定义一个函数
def decorate(func):
def wrapper(*args,**kwargs):
print("定义一个装饰器")
func(*args,**kwargs)
return wrapper
此时就已经定义好了一个基本的装饰器,那该如何调用呢?
@decorate
def text1():
print("text1")
text1()
输出的结果为:
定义一个装饰器
text1
分析:此时的@decorate
相当于将text1函数的内存地址传入decorate函数,并返回wrapper函数的内存地址。因此在代码结尾中调用text1()
本质上是执行wrapper函数。因为执行的是wrapper函数,所以会打印”定义一个装饰器”,又因为func函数是text1的内存地址,所以调用func,会打印”text1”。
带参数的装饰器
上面介绍了一个简单的装饰器如何定义,可是我们常常看到一个装饰器@xxxxxxx(abc="python")
,这种装饰器是如何封装的,原理又是怎么样的呢
def decorate(name):
def wrapper(func):
def sub_wrapper(*args,**kwargs):
print("定义一个带参数的装饰器",name)
func(*args,**kwargs)
return sub_wrapper
return wrapper
@decorate(name="python")
def text1():
print("text1")
text1()
输出结果:
定义一个带参数的装饰器 python
text1
分析:带参数的装饰器与普通的装饰器多加了一层,其实就是讲“python”参数传入decorate函数,并返回wrapper函数的内存地址,再将text1函数内存地址传入wrapper函数,并返回了sub_wrapper函数的内存地址。而在代码末尾调用text1,其实本质是调用了sub_wrapper函数。
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/y472360651/article/details/73006313
猜你喜欢
- 一、环境windows二、下载进入Anaconda 官网进行下载 安装 找到安装包所在的目录,双击安装包点击 Next点击 I A
- 应用目标:制作文字特效 应用软件:Dreamweaver MX操作难度:★★☆☆☆我们常用的网页制作工具Dreamweaver MX不仅可以
- 1、实现目标Golang 使用excelize 导出表格到浏览器下载或者保存到本地。后续导入的话也会写到这里2、使用的库go get git
- 01、文件操作文件是操作系统提供给用户/应用程序操作硬盘的一个虚拟的概念/接口用户/应用程序可以通过文件将数据永久保存在硬盘中用户/应用程序
- <script language=javascript> function moveIt(obj){ var tableId;
- 本文通过Python3+PyQt5实现《python Qt Gui 快速编程》这本书的page Designer应用程序,采用QGraphi
- 一般来说,我们会将自己写的Python模块与python自带的模块分开存放以达到便于维护的目的。那么如何在Python中添加自定义的模块呢?
- 1、使用定时器2、使用这种方式go function() func function() { // TODO 具体逻辑// 每5分钟执行一次
- 一、什么是xml?有何特征?xml即可扩展标记语言,它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。例子:
- 使用auto.js实现自动化每日打卡疫情原因,需要在家每天定时打卡,每天刚起床的时候避免不了出现注意力不集中或者是看不到app,点不到按钮什
- 配置要求:IIS(win2000 server 自带)、Java 2 SDK 1.4.2 (或更高版本)、Tomcat Web Server
- 我就废话不多说了,大家还是直接看代码吧!import matplotlib.pyplot as pltimport numpy as npf
- 使用css2.1实现多重背景、多重边框效果在单个HTML元素上利用CSS2.1实现拥有3张背景图片和2张内容图效果,或者多重边框的效果。这种
- JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务器端的。而cookie是运行在
- a {}{ background:url(images/normal.gif); } a:ho
- 一、前言在开展接口测试或者是接口面试的过程中,我们会发现很多接口需要依赖前面的接口,需要我们动态从前面的接口返回中提取数据,也就是我们通常说
- 前言上一节我们讲解了数据类型以及字符串中几个需要注意的地方,这节我们继续讲讲字符串行数同时也讲其他内容和穿插的内容,简短的内容,深入的讲解。
- 概述Vue 在插入、更新或者移除 DOM 时,提供多种不同方式的应用过渡效果。包括以下工具:在 CSS 过渡和动画中自动应用 class可以
- Lists Snippets我们先从最常用的数据结构列表开始1.将两个列表合并成一个字典假设我们在 Python 中有两个列表,我们希望将它
- 遇到的问题:在pytorch训练过程中突然out of memory。解决方法:1. 测试的时候爆显存有可能是忘记设置no_grad加入 w