python之装饰器

【Python】新手入门:什么是python装饰器?如何使用python装饰器?什么是python类装饰器?什么是python内置装饰器? Python装饰器是一种高级功能,能够在不修改原代码的情况下动态增强函数或类的行为。其核心原理是通过嵌套函数包装目标函数,在调用前后添加额外逻辑,例如日志记录、性能分析或权限控制。装饰器语法简洁,使用@符号即可快速应用。它支持参数传递,也能通过多层嵌套实现复杂功能。此外,装饰器不仅适用于函数,还能扩展类功能,如实现单例模式或属性管理。内置装饰器如静态方法和类方法进一步简化了代码结构。这种设计模式显著提升了代码复用性和可维护性,是Python编程中极具特色的重要特性。 阅读详情

函数的装饰器

把一个函数当作参数,返回一个替代版的函数
本质上就是一个返回函数的函数
输入

def funA(fn):
    print('a')
    fn() # 执行传入的FN参数
    return 'A'
## b函数被a函数修饰,所以a函数的返回值就是b函数的参数
@funA
def funB():
    print('qwertyu')
print(funB)

输出

a
qwertyu
A

装饰有参数的函数

输入

import time
def decorator(func):
    def wrapper(*args,**kwargs):
        print(time.time())
        func(*args,**kwargs)
    return wrapper

	@decorator
def f3(func_name1,func_name2,**kwargs):
    print('This is function ' + func_name1)
    print('This is function ' + func_name2)
    print(kwargs)

f3('test1','test2',a=1,b=2,c='westos')

输出

1568185059.3025641
This is function test1
This is function test2
{'a': 1, 'b': 2, 'c': 'westos'}

多个装饰器修饰一个函数

输入

import functools
import inspect

def is_admin(fun):
    @functools.wraps(fun)
    def wrapper(*args,**kwargs):
        #inspect.getcallargs返回一个字典,key值:形参 value值:对应的实参
        inspect_res = inspect.getcallargs(fun,*args,*kwargs)
        print('inspect的返回值: %s' %inspect_res)
        if inspect_res.get('name') == 'root':
            res = fun(*args,**kwargs)
            return res
        else:
            print('Permission denied!')
    return wrapper


login_user = ['root','admin','redhat']

def is_login(fun):
    @functools.wraps(fun)
    def wrapper(*args,**kwargs):
        if args[0] in login_user:
            res = fun(*args,**kwargs)
            return res
        else:
            print('Error: %s未登录' %args[0])
    return wrapper

@is_login
@is_admin
def add_student(name):
    print('添加学生%s...' %name)

add_student('root')

输出

inspect的返回值: {'name': 'root'}
添加学生root...

带参数的装饰器

需求如下:
1). 当装饰器为@required_types(int,float)确保函数接收到的每一个参数都是int或者float类型;
2). 当装饰器为@required_types(list)确保函数接收到的每一个参数都是list类型;
3). 当装饰器为@required_types(str,int)确保函数接收到的每一个参数都是str或者int类型;
4). 如果参数不满足条件, 打印 TypeError:参数必须为xxxx类型

输入
import functools

def required_types(*kinds):
    def required(fun):
        @functools.wraps(fun)
        def wrapper(*args,**kwargs):
            for i in args:
                if not isinstance(i,kinds):
                    # print('TypeError:参数必须为',kinds)
                    raise TypeError('参数必须为%s,%s' %kinds)
            else:
                res = fun(*args,**kwargs)
                return res
        return wrapper
    return required


@required_types(float,float)
def add(a,b):
    return a+b

print(add(1.0,2.1))

输出

3.1
Python 装饰器 装饰器(decorators)是 Python 中的一种高级功能,它允许你动态地修改函数或类的行为。python的装饰器分三种:函数装饰器、类装饰器、内置装饰器装饰器的语法使用 @decorator_name 来应用在函数或方法上。Python 装饰允许在不修改原有函数代码的基础上,动态地增加或修改函数的功能,装饰器本质上是一个接收函数作为输入并返回一个新的包装过后的函数的对象。 阅读详情

相关推荐

Yolov5s/Yolov8s网络结构图

yolov8、yolov5网络结构图

Goodness2020的博客 9925

python 装饰器

装饰器本质上就是一个函数,这个函数接受其他函数作为参数,并将其以一个新的修改后的函数进行替换

zhengzaifeidelushang的博客 368

别再为授权费头疼了!手把手教你免授权搞定西门子、马扎克等12种主流数控机床的数据采集

本文提供了一套免授权采集西门子、马扎克等12种主流数控机床数据的实战指南,帮助中小型机加工车间节省80%以上的采集成本。通过TCP/UDP协议逆向工程和跨平台数据整合,实现经济、灵活且可持续的数据采集方案,涵盖设备兼容性处理、数据频率优化等关键问题。

weixin_26873711的博客 707

python的简单介绍

解释器和编辑器 编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,例如.c文件,.class文件。这样运行时计算机可以直接以机器语言来运行此程序,速度很快。运行于工作前 解释器只在执行程序时,一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的。运行于工作时 这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式) 解释性语言和...

bread_winner的博客 373

避坑指南:PVE下N卡直通错误代码43的终极解决思路与dmesg日志分析

本文详细解析了PVE环境下NVIDIA显卡直通时遇到的错误代码43问题,提供了从dmesg日志分析到BIOS配置、PVE宿主机优化及虚拟机设置的完整解决方案。特别针对GTX1060等显卡,分享了驱动版本选择、ROM修补及高级排错技巧,帮助用户彻底解决这一常见难题。

weixin_28693683的博客 289

元学习与Transformer的结合:Meta-Transformer架构解析

我们生活在一个信息爆炸的时代,每天都会产生海量的数据。在深度学习领域,如何让模型更高效地学习、更快地适应新的任务,一直是科学家们努力的方向。元学习和Transformer都是深度学习中的重要概念,它们各自有着独特的优势。本文的目的就是深入剖析将元学习和Transformer结合起来的Meta - Transformer架构,探讨它的原理、应用以及未来发展。我们会从基础概念讲起,逐步深入到架构的各个方面,让大家对Meta - Transformer有一个全面的了解。

AI智能探索者的博客 1052

Python装饰器详解

详细介绍了Python装饰器语法的有关内容与使用技巧,希望对大家有所帮助。

千山暮彩 1万+

搞定ESD(七):静电放电问题典型案例分析(二)

静电放电噪声耦合的方式主要是:传导耦合与辐射耦合,辐射耦合主要以磁场耦合、 电场耦合为主要形式。电场耦合发生的主要条件是:静电放电高频在参考地平面寄生电感中产生电平波动,平行于参考地平面上的较长信号布线就很容易通过分布电容发生电场耦合。根据高速信号回流路径的特性可知,其回流路径是贴近信号布线下方,或者信号两侧,若信号回流路径跨分割后,环路面积会随之增大;信号环路面积大从EMI角度看其空间辐射更强,从EMS角度看则更容易耦合外部噪声干扰(雷击浪涌、EFT、ESD、RS)。

记得诚 2801

python中装饰器详解

装饰器 我们知道,在python中,我们可以像使用变量一样使用函,这主要依赖于以下几点: 函数可以被赋值给其他变量 函数可以被删除 可以在函数里面再定义函数,函数嵌套。 函数可以作为参数传递给另外一个函数 函数可以作为另一个函数的返回值 对一个简单的函数进行装饰 为了更好的理解装饰器,我们先从一个简单的例子开始,假设有下面这个函数: def hello(): return...

AFeng521web 7939

海上通信技术发展与研究综述

通过对海浪模型、节点运动特性、天线辐射特性等进行特征深度学习,考虑改变有效链路的持续时间、业务类型和容量的区别,以及卫星和节点的仰角等,改变通信策略,设计动态波束成形算法,优化折中浮标天线增益和波束宽度,适应海上环境,尤其是海浪运动时变的特性。目前的海上通信系统,同时包括海上无线通信系统、卫星通信系统、岸基通信系统、船载基站通信系统、空中基站通信系统等不同方法组成的通信系统来满足不同的需求,如海上无线通信系统通信成本低廉、卫星通信系统具有广域的覆盖范围、岸基通信网络可以实现数据高速传输。

weixin_70923796的博客 1000

全网最详细的UAVCAN/DroneCAN链路开发(官方DroneCAN消息+自定义DroneCAN消息)附DroneCAN项目源码

全网最详细的UAVCAN/DroneCAN链路移植开发(官方DroneCAN消息+自定义DroneCAN消息)附工程移植源码

Bit_Dong的博客 3235

Python装饰器的实现和万能装饰器

Python装饰器的实现和万能装饰器 在Python中,装饰器是在不改变已有函数的代码的前提下,给函数增加新的功能的一种函数。 装饰器接收一个函数作为参数,返回值也是一个函数。 在Python中,实现装饰器的方式叫做闭包。 一、闭包的实现 闭包是指函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。 闭包的使用,可以隐藏内部函数的工作细节,只给外部...

weixin_43790276的博客 5987

YOLOv8独家原创改进:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF_improve利用全局平均池化层和全局最大池化层,加入一些全局背景信息和边缘信息,从而获取全局视角信息并减轻不同尺度大小所带来的影响

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 4684

【python】python装饰器

Python装饰器(Decorator)是一种设计模式,允许你在不修改函数代码的前提下,增强或修改函数的功能。装饰器本质上是一个高阶函数,它接收一个函数作为参数,并返回一个增强后的函数。下面我们详细介绍Python装饰器的概念、使用场景及实现方法。

kissdragan的博客 1502

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【Python】装饰器

装饰器是 Python 中的一个强大工具,允许你在不改变函数本身的代码情况下,动态地修改或扩展其行为。装饰器通常用于日志记录、权限验证、缓存、性能监控等应用。你可以使用@decorator语法将装饰器应用到函数或方法上。装饰器是高阶函数,可以接受函数作为参数并返回一个新函数。

wq6qeg88的博客 2275

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

python装饰器

学习目标:一口气把装饰器描述清楚 弄清楚装饰器前要理解三个东西: 函数对象、函数嵌套、函数构成闭包。 学习内容: 函数对象好说,python编程语言属于动态语言,python中一切皆对象,所以函数也是对象。 函数对象用函数名称表示(仅名称,没有括号,也没有参数)。 例如,定义了一个求和函数add,那么此处的add就是个函数对象。 def add(username, a, b): print(f"{a}+{b}={a + b}") return a + b 函数嵌套或者嵌套函数,就是定

人工智能视觉分析算法学习实践和经验分享。 3230

Python装饰器

装饰器是一种高级功能,用于在不修改函数源代码的情况下,向函数添加额外的功能。它允许我们修改或增强函数的行为,类似于“装饰”或“修饰”原始函数。装饰器本质上是一个高阶函数,它接受一个函数作为输入,并返回一个新的函数作为输出。使用装饰器的主要优势之一是它可以封装代码的重复部分,并在不改变原始函数逻辑的前提下为其添加新的功能。这使得代码更加模块化和可重用。在Python中,装饰器使用特殊的语法,以“@”符号开头,后跟一个函数或类的名称。这个被装饰的函数或类可以是任何有效的Python表达式。例如:pass。

汉阳Hann's Home 1375

python装饰器class_python 装饰器详解

python装饰器详解python装饰器的详细解析什么是装饰器?推荐学习:Python视频教程python装饰器(fuctional decorators)就是用于拓展原来函数功能的一种函数,目的是在不改变原函数名(或类名)的情况下,给函数增加新的功能。这个函数的特殊之处在于它的返回值也是一个函数,这个函数是内嵌“原“”函数的函数。一般而言,我们要想拓展原来函数代码,最直接的办法就是侵入代码里面修...

weixin_39898550的博客 697

【Python】Python装饰器

python装饰器 函数装饰器 类装饰器 单例模式

@苏丶的博客 1024

【python】装饰器

在Python中,装饰器(decorators)是一种高级功能,它允许你在不修改原有函数或方法代码的情况下,给函数或方法添加新的功能。装饰器本质上是一个返回函数的函数,它接受一个函数作为参数,并返回一个新的函数(有时是对原函数的封装或修改)。

morris 1万+

[Python]装饰器

1. 装饰器的定义 1.1 装饰器的功能特点 2. 装饰器的示例代码 3. 装饰器的语法糖写法 4. 装饰器的执行时机 5. 装饰器的使用 5.1 装饰器的使用场景 5.2 装饰器实现已有函数执行时间的统计 6. 通用装饰器的使用 6.1 装饰带有参数的函数 6.2 装饰带有参数和返回值的函数 6.3 装饰带有不定长参数和返回值的函数 6.4 通用装饰器 7. 多个装饰器的使用 8. 带有参数的装饰器 9. 类装饰器的使用

emmmm..... 1337

python-函数装饰器,类装饰器,属性装饰器

理解装饰器 python中的装饰器看起来类似java中的注解,然而并不相同,Python中装饰器本质是一个函数,只是这个函数可以在不改变别的函数的基础上,增加一些功能,想要理解装饰器,首先了解一下闭包这个概念 闭包 通俗点说,函数A中定义了另外一个函数B,这里A称为外函数,B称为内函数,所谓的闭包就是,内涵数B运用了外函数A定义的变量C,并且外函数的返回值是内函数的引用,这就是闭包,给段代码了解下: def A(number): C= 10 def B(): return int(number) +

m0_47671192的博客 1823

python装饰器_Python装饰器

装饰器前缘Python装饰器对于Python初学者可能是一个比较抽象的概念,在了解装饰器之前,我们必须先熟悉Pythond方法的一个特性:Python中的方法可以像普通变量一样当做参数传递给另外一个方法,我们来看一个例子:def add(x,y): return x+ydef sub(x,y): return x-ydef apply(func,x,y): return...

weixin_40003233的博客 179
上一篇: python之高阶函数
下一篇: python中的文件系统管理(os模块)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值