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
猜你喜欢
- 前言本章介绍pandas中的缺失数据,主要内容有:pandas中对np.nan的操作: 统计 、 删除 、 填充 、 插值 pan
- LCase:转成小写 UCase:转成大写 下面是ASP中的代码,可以直接演示效果的。 代码如下:<% dim s
- 一、简介Imageio是一个Python库,提供了一个简单的界面来读取和写入各种图像数据,包括动画图像,视频,体积数据和科学格式。它是跨平台
- 本文实例讲述了flask框架单元测试原理与用法。分享给大家供大家参考,具体如下:为什么要测试?Web程序开发过程一般包括以下几个阶段:[需求
- 最好的方法: 先说一下基本的东西: <%@ codepage=65001%>UTF-8 <%@&nbs
- 直接转换就行了,key为DataFrame的column;import pandas as pddata = pd.read_csv(
- 源码:#!/usr/bin/env python# -*- coding:utf-8 -*- import turtleimport tim
- 本文实例讲述了Python基于matplotlib实现绘制三维图形功能。分享给大家供大家参考,具体如下:代码一:# coding=utf-8
- 做一个总结,把自己这些年的从业经历和观感罗列一下,某些话可能触及到个人神经,但它们没有恶意。设计师喜欢把世界想象得很美好,社会很和谐,但是这
- 代码import xlrdimport os from prettytable import PrettyTableimport panda
- numpy.reshape(重塑)给数组一个新的形状而不改变其数据numpy.reshape(a, newshape, order='
- 1. 用 Numpy ndarray 作为数据传入 plyimport numpy as npimport matplotlib as mp
- 前言本人因为比较喜欢看漫画和动漫, 所以总会遇到一些问题, 因为订阅的漫画或者动漫太多, 总会忘记自己看到那一章节或者不知道什么时候更新.
- 本文的JS效果是在鼠标点击ITEM标签的时候,实现下方的内容跟随滚动切换的效果,我们先来看下运行后的效果图。以下是脚本之家原创的运行代码:&
- WaitGroup的用途:它能够一直等到所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成。官方对
- 对于windows平台来说安装完MySQL后,系统就已经默认生成了许可表和账户,你不需要像在Unix平台上那样执行 mysql_instal
- 昨天在写“同IP站点查询”工具的时候,需要先用ASP获取查询域名的IP,本来是用WSHSHELL组件,代码如下:<%@LANGUAGE
- 1.简介 蒙特卡洛又称随机抽样或统计试验,就是
- 这篇文章是为了对网络模型的权重输出,可以用来转换成其他框架的模型。import tensorflow as tffrom tensorflo
- 生活中经常会碰到多个excel表格汇总成一个表格的情况,比如你发放了一份表格让班级所有同学填写,而你负责将大家的结果合并成一个。诸如此类的问