Python基础篇(十一):装饰器

news/2024/12/22 14:05:33/

装饰器

  • 前言
  • 1. 装饰器的定义
  • 2. 装饰器的应用
  • 3. 装饰器的语法
  • 4. func(*args, **kwargs)

前言

装饰器是Python中一种强大的函数或类修饰机制,用于在不修改原始函数或类代码的情况下,对其进行功能扩展或修改。装饰器基于函数式编程的概念,通过将函数作为参数传递给另一个函数,并返回一个新的函数来实现。

下面是关于装饰器的介绍和示例:

1. 装饰器的定义

装饰器是一个函数,它接受一个函数作为输入,并返回一个新的函数作为输出。装饰器可以在不修改原始函数的情况下,为其添加额外的功能或修改其行为。(感觉像java中的面向切面编程~)

2. 装饰器的应用

装饰器常用于以下场景:

  • 添加日志记录
  • 计时统计
  • 输入验证和修正
  • 缓存结果
  • 权限验证
  • 错误处理

3. 装饰器的语法

装饰器使用@符号紧跟在函数定义的上方,表示将函数装饰为另一个函数。装饰器函数可以接受任意数量的参数,并返回一个新的函数。 在示例中,decorator函数是一个装饰器函数,它接受一个函数作为参数并返回一个新的函数wrapperwrapper函数在调用原始函数之前和之后执行一些操作,然后调用原始函数并返回其结果。通过在原始函数上方使用@decorator语法,将原始函数装饰为经过装饰器修饰的新函数。

示例:

def decorator(func):def wrapper(*args, **kwargs):# 在调用原始函数之前执行的操作print("执行装饰器前操作")# 调用原始函数result = func(*args, **kwargs)# 在调用原始函数之后执行的操作print("执行装饰器后操作")# 返回原始函数的结果return resultreturn wrapper# 应用装饰器
@decorator
def my_function():print("原始函数")# 调用装饰后的函数
my_function()

运行以上示例,将会输出:

执行装饰器前操作
原始函数
执行装饰器后操作

在这里插入图片描述
在这里插入图片描述

装饰器是Python中强大且常用的特性,它可以轻松地扩展和修改函数的功能,同时提高了代码的可重用性和可读性。在实际开发中,装饰器常用于切面编程和元编程,为代码添加横切关注点和动态功能。

4. func(*args, **kwargs)

func(*args, **kwargs) 是一种在函数调用时传递可变数量参数的方式,其中 argskwargs 是两种常用的参数形式。

  • *args 表示将参数作为一个元组(tuple)传递给函数。它允许你传递任意数量的位置参数给函数,这些参数会被打包成一个元组传递给函数内部。函数内部可以使用 args 来访问这个元组,并对其中的参数进行操作。

  • **kwargs 表示将参数作为一个字典(dict)传递给函数。它允许你传递任意数量的关键字参数给函数,这些参数会被打包成一个字典传递给函数内部。函数内部可以使用 kwargs 来访问这个字典,并对其中的参数进行操作。

下面示例来说明 func(*args, **kwargs) 的使用:

def example_func(*args, **kwargs):print("位置参数:")for arg in args:print(arg)print("关键字参数:")for key, value in kwargs.items():print(key, value)# 传递位置参数和关键字参数
example_func(1, 2, 3, name="John", age=25)

运行以上示例,将会输出:

位置参数:
1
2
3
关键字参数:
name John
age 25

在示例中,example_func 函数使用了 *args**kwargs 来接受任意数量的位置参数和关键字参数。通过调用 example_func(1, 2, 3, name="John", age=25),将 1、2 和 3 作为位置参数传递,而 name 和 age 则作为关键字参数传递。函数内部可以使用 argskwargs 来访问这些参数,并对它们进行操作。这种方式使得函数能够处理不确定数量的参数,使函数的使用更加灵活和通用。


http://www.ppmy.cn/news/539711.html

相关文章

4G和5G频谱共享技术

【摘 要】目前4G向5G重耕过程中存在频谱利用不平衡的问题,可采用动态频谱共享的技术解决。基于对现有频谱共享方案的原理分析,通过理论测算和实验室测试结合的方法研究终端和基站各功能特性对于终端性能的影响。动态频谱共享对下行影响较大,对上行影响较小,不同功能选择会…

c语言log库,Log4g

软件简介 Log4g是一个基于GObject 的日志工具。Log4g 的设计基于对流行的Log4j 1.2 日志包的移植。Log4j已经被移植到了很多编程语言中,包括(不限于)C、Perl和Python。Log4g将这个功能带到C/GLib/GObject编程栈中。 Log4g 的核心组件是记录器(loggers)、附加器(appe…

4G全网构建仿真

4G指的是第四代移动电话行动通信标准,是第四代移动通信技术,也是3G的延伸。4G是集3G与WLAN于一体,并能够传输高质量视频图像,它的图像传输质量与高清晰度电视不相上下。4G系统能够以10Mbps的速度下载,比拨号上网快200倍…

华为云学院-人人学loT学习笔记及扩展- 第一章 初识物联网

1.1初探物联网 一,物联网 百度解释: 物联网(The Internet of Things,简称IOT)是指通过 各种信息传感器、射频识别技术、全球定位系统、红外感应器、激光扫描器等各种装置与技术(可理解为通信感知技术),实…

4G和4G LTE之间的区别是什么?

(本文转载自http://www.mokuai.cn) 4G是第四代移动网络技术。4G用于取代3G,它提供了更可靠的连接并提供更高的速度。具体而言,4G LTE意味着“第四代长期演进”,LTE是一种4G,可为移动互联网体验提供最快的连接 - 比3G快10倍。许多人可以互换使用4G和4G LTE这两个术语,但它…

4G 通信技术简介

4G技术 G技术,第四代移动通信及其技术的简称,是集3G与WLAN于一体并能够传输高质量视频图像且图像传输质量与高清晰度电视不相上下的技术产品。4G移动通信技术的根本目的主要是能够在各终端产品间发送、接收来自另一端的信号,并在多个不同的网…

逍遥自在学C语言 | 多级指针探秘

前言 多级指针在C语言中是一种特殊的指针类型,它可以指向其他指针的指针。 通过多级指针,我们可以间接地访问或修改存储在内存中的数据。 在本文中,我们将讨论多级指针的概念、使用方法、使用场景以及常见错误及其避免方法。 一、人物简介…

Shell基本操作

目录 一、什么是Shell 二、Shell和Bash有什么关系?有什么区别? 三、Shell命令格式 四、自动补全功能 五、常用 Shell 命令 1、目录信息查看命令 ls 2、目录切换命令 cd 3、当前路径显示命令 pwd 4、系统信息查看命令 uname 5、清屏命令 clea…