Python中的定长参数和不定长参数:深入理解与应用

文章目录

    • 1. 定长参数的基本使用
    • 2. 不定长参数的基本使用
      • 2.1 *args 的使用
      • 2.2 **kwargs 的使用
    • 3. 参数的混合使用
    • 4. 参数的应用实例
      • 4.1 数据处理示例
      • 4.2 事件处理示例
      • 小彩蛋...

函数参数的灵活处理是编写高效、可读性强的代码的关键。下面将详细介绍定长参数和不定长参数的使用方法,并通过示例代码加深理解。

1. 定长参数的基本使用

定长参数,也就是在函数定义时明确指定的参数,其数量和位置在调用时必须严格匹配。这是最基本的参数类型,适用于那些在功能设计时就能确定输入项的场景。

示例代码:

def add_two_numbers(x, y):return x + yresult = add_two_numbers(5, 3)
print(result)  # 输出:8

add_two_numbers 函数定义了两个定长参数 xy。调用此函数时必须提供两个相应的实参,否则会导致错误。

2. 不定长参数的基本使用

与定长参数不同,不定长参数允许你在函数调用时传入任意数量的参数。这在处理不确定数量的输入数据时非常有用。Python中有两种类型的不定长参数:*args 和 **kwargs。

2.1 *args 的使用

*args 用于收集额外的位置参数,这些参数被存储在一个元组中。通过这种方式,函数可以接受任意数量的位置参数。

示例代码:

def print_args(*args):for arg in args:print(arg)print_args('Hello', 'World', 123, 'Python')

print_args 函数使用 *args 来接收多个未命名的位置参数,并依次打印出来。

2.2 **kwargs 的使用

**kwargs 用于收集额外的关键字参数,这些参数被存储在一个字典中。这允许函数接受任意数量的命名参数。

示例代码:

def print_kwargs(**kwargs):for key, value in kwargs.items():print(f"{key}: {value}")print_kwargs(name='John', age=30, country='USA')

上面的代码展示了如何使用 **kwargs 来接收和处理不同的命名参数。

3. 参数的混合使用

在实际应用中,*args**kwargs 可以与定长参数混合使用,这样灵活性就更大了。不过要注意参数的顺序:定长参数应该放在前面,然后是 *args,最后是 **kwargs

示例代码:

def mixed_function(a, b, *args, **kwargs):print(f"a: {a}, b: {b}")print("args:", args)print("kwargs:", kwargs)mixed_function(1, 2, 3, 4, 5, first_name='John', last_name='Doe')

mixed_function 接收了两个定长参数 ab,随后是任意数量的位置参数和关键字参数。

4. 参数的应用实例

理解了参数的各种使用方式后,就可以将这些知识应用于更复杂的实际问题中了。比如在数据处理、事件处理等场景中,灵活的参数处理可以显著提升代码的通用性和可维护性。

4.1 数据处理示例

假设现在需要设计一个函数,该函数可以接受多个数据集(列表形式),并返回它们的合并结果。

示例代码:

def merge_datasets(*datasets):result = []for dataset in datasets:result.extend(dataset)return resultdata1 = [1, 2, 3]
data2 = [4, 5, 6]
data3 = [7, 8, 9]merged_data = merge_datasets(data1, data2, data3)
print(merged_data)  # 输出:[1, 2, 3, 4, 5, 6, 7, 8, 9]

看到这里,应该有小伙伴要问了,为什么形参没有写args,而写了datasets。

其实,这个参数的名称是可以自由选择的。args 只是一个广泛使用的习惯用法,意味着“多个参数”,但并不是强制的。完全可以将 *args 替换为 *elements 或任何其他有效的变量名,这不会影响函数的功能。关键点在于星号 *,它标识了参数为可变数量的位置参数。

4.2 事件处理示例

在设计事件驱动的应用或框架时,使用 **kwargs 可以提供额外的灵活性,使得事件处理函数能够接受各种不预期的关键字参数。

示例代码:

pythonCopy codedef handle_event(event_type, **attributes):print(f"Event Type: {event_type}")for attr, value in attributes.items():print(f"{attr}: {value}")handle_event('ButtonClick', button_id='123', action='submit')

上面也是同理的,关键字参数只要注意写两个星号**就行,参数名填kwargs或者自定义都行。

小彩蛋…

看到这里,应该有人会好奇args是什么吧,毕竟不是每个人的英语都很好。

在 Python 中的话,args 通常是作为参数列表的简写,全称是 “arguments”,意指“参数”。就是英文的“参数”而已。


推荐我的相关专栏: python 错误记录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/818733.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【代码随想录算法训练营第四十八天 | LeetCode198.打家劫舍、213.打家劫舍II、337.打家劫舍III】

代码随想录算法训练营第四十八天 | LeetCode198.打家劫舍、213.打家劫舍II、337.打家劫舍III 一、198.打家劫舍 解题代码C&#xff1a; class Solution { public:int rob(vector<int>& nums) {if (nums.size() 0) return 0;if (nums.size() 1) return nums[0];ve…

CAN帧中的ACK位

1&#xff1a;先看官方文档对ACK的解释 All nodes that have received the matching CRC sequence (and, in FD Frames the matching stuff count) shall send an ACK within the ACK slot by overwriting the recessive bit of the transmitter by a dominant bit (they send…

求圆、圆球和圆柱的面积和体积(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h> //定义π常量的值&#xff1b; # define π 3.141526int main() {//初始化变量值&#xff1b;float r, h, S1, S2, P1, V1, V2;int judge 0;//提示用户&#x…

Python基于flask的豆瓣电影分析可视化系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

第一天练习

一.在系统中设定延迟任务要求如下 在系统中建立easylee用户&#xff0c;设定其密码为easylee [rootxixi /]# useradd easylee [rootxixi /]# passwd easylee Changing password for user easylee. New password:easylee BAD PASSWORD: The password is shorter than 8 charac…

python 实现方差检验

前面介绍的 z z z检验和 t t t检验主要用于对总体的均值进行假设检验&#xff0c;下面主要介绍对总体方差进行假设检验的方法。 一. 单个总体方差检验 设总体 X ∼ N ( μ , δ 2 ) X\sim N(\mu, \delta^2) X∼N(μ,δ2)&#xff0c; μ , δ 2 \mu,\delta^2 μ,δ2均未知&am…

mid_360建图和定位

录制数据 roslaunch livox_ros_driver2 msg_MID360.launch使用fast-lio 建图 https://github.com/hku-mars/FAST_LIO.git 建图效果 使用python做显示 https://gitee.com/linjiey11/mid360/blob/master/show_pcd.py 使用 point_lio建图 https://github.com/hku-mars/Point…

【数据结构】【C++】AVL树的模拟实现(插入、判断、旋转)

文章目录 1 概念2 实现2.1 AVL树结点的定义2.2 AVL树的插入2.2.1 AVL树的插入规则2.2.2 旋转2.2.2.1 左单旋2.2.2.2 右单旋2.2.2.3 左右双旋2.2.2.4 右左双旋 2.2.3 总结 3 平衡判断4 删除5 源码 1 概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二…

找不到api-ms-win-crt-runtime-l1-1-0.dll文件5种解决方法

在日常使用计算机的过程中&#xff0c;我们时常会遭遇各类意想不到的问题&#xff0c;其中之一就是“api-ms-win-crt-runtime-l1-1-0.dll丢失”。这个错误通常发生在Windows操作系统中&#xff0c;它表示一个动态链接库文件丢失或损坏。这个问题可能会导致某些应用程序无法正常…

【LeetCode热题100】【矩阵】搜索二维矩阵 II

题目链接&#xff1a;240. 搜索二维矩阵 II - 力扣&#xff08;LeetCode&#xff09; 从右上角开始搜索&#xff0c;如果当前元素比目标小&#xff0c;那么说明目标只能存在下面矩阵&#xff0c;搜索范围往下压扁&#xff0c;如果当前元素比目标大&#xff0c;说明目标只能存在…

Linux命令、代码【无标题】

$ tar zxf file.tar.gz linux tar 解压缩相关 解压.gz文件&#xff1a; tar zxf save.tar.gz其中&#xff0c;“z”表示使用 gzip 解压缩&#xff0c;“x”表示解包.gz解压命令 linux&#xff0c;“f”表示指定要解包的文件名。 tar –xvf file.tar # 在当前目录解压 tar包 t…

1Panel官方出品丨MaxKB:基于LLM大模型的知识库问答系统

1Panel&#xff08;github.com/1Panel-dev/1Panel&#xff09;是一款现代化、开源的Linux服务器运维管理面板&#xff0c;它致力于通过开源的方式&#xff0c;帮助用户简化建站与运维管理流程。为了方便广大用户快捷安装部署相关软件应用&#xff0c;1Panel特别开通应用商店&am…

TensorFlow 1.x的学习

.为什么还有很多人都选择使用TensorFlow 1.x 兼容性问题: TensorFlow 1.x在一些旧项目中已经得到了广泛应用&#xff0c;这些项目可能依赖于1.x版本的特定API或行为。升级到2.x可能需要大量的代码修改和测试工作&#xff0c;对于一些已经稳定运行的项目&#xff0c;维护者可能…

实现iOS App代码混淆

简介 在开发iOS应用程序时&#xff0c;保护代码安全是至关重要的。代码混淆是一种常用的技术&#xff0c;可以增加逆向工程的难度&#xff0c;防止他人对代码的篡改和盗用。本文将介绍如何实现iOS App代码混淆的步骤和操作方法。 整体流程 下面是实现iOS App代码混淆的整体流…

创维:在博鳌论坛 叩响世界之门

出走半生&#xff0c;归来仍是少年。 2024年4月8日&#xff0c;一个离开海南近半个世纪的“少年”回到琼海博鳌&#xff0c;“下一站&#xff0c;1000亿&#xff01;”&#xff0c;他的承诺掷地有声。“1000亿”&#xff0c;意指创维集团在2025年前冲击千亿营收&#xff0c;这…

【JavaWeb】Day45.Mybatis——入门程序

什么是MyBatis? MyBatis是一款优秀的持久层框架&#xff0c;用于简化JDBC的开发。 &#xff08;持久层&#xff1a;指的是就是数据访问层(dao)&#xff0c;是用来操作数据库的。&#xff09; &#xff08;框架&#xff1a;是一个半成品软件&#xff0c;是一套可重用的、通用…

如何定义系统无故障运行维度的能力(高可用、高可靠、高稳定、高容错),及对应衡量指标

1、哪些概念能定义系统无故障运行维度的能力 高可用性、高可靠性、高稳定性和高容错性 这 4 个概念经常用于定义系统无故障运行维度的能力。 它们之间存在区别。具体如下&#xff1a; 高可用性&#xff1a;指的是系统或服务能够保持长时间运行&#xff0c;即使遇到故障也能迅…

vue2动画

vue2动画 在Vue.js 2中&#xff0c;动画和过渡是通过<transition>和<transition-group>组件来实现的 <transition> 组件 <transition> 组件包裹单个元素或组件&#xff0c;并在它们渲染、更新或从DOM中移除时触发过渡效果。这个组件不会渲染为任何额…

【企业动态】瑞芯微高级业务总监来访东胜物联,共探新能源汽车市场合作

近日&#xff0c;瑞芯微高级业务总监阙金珍一行来访东胜物联参观交流&#xff0c;并就深化合作进行讨论。 东胜物联与瑞芯微建有长期稳固的合作关系&#xff0c;基于RK3588、RK3399、RK3568等处理器&#xff0c;推出了多款嵌入式核心硬件产品&#xff0c;包括核心板、网关等&a…

添加usb function <一>

1、usb描述信息 struct usb_interface_descriptor {__u8 bLength;__u8 bDescriptorType;__u8 bInterfaceNumber;__u8 bAlternateSetting;__u8 bNumEndpoints;__u8 bInterfaceClass;__u8 bInterfaceSubClass;__u8 bInterfaceProtocol;__u8 iInterface; }/* 接口描述信…