【Python】Python可变参数*args **kwargs

Python可变参数:*args和**kwargs的使用场景与技巧 Python中的可变参数机制允许函数接收不定数量的参数,主要通过*args和**kwargs实现。*args用于接收任意数量的位置参数,并将其收集为元组;**kwargs则用于接收任意数量的关键字参数,并将其收集为字典。这两种机制在函数定义和调用时均可使用,支持参数的解包与收集。*args常用于实现可变参数函数、包装函数或参数预处理,而**kwargs则适用于处理配置选项、函数包装或类继承中的参数传递。此外,参数解包技巧可以在调用函数时将序列或映射解包为单独的参数。尽管可变参数机制带来了一定的灵活性,但在性 阅读详情

可变参数*args 和 **kwargs

作为函数定义时:收集未匹配参数组成tuple或dict对象

*参数也就是*args收集所有未匹配的位置参数组成一个tuple对象,局部变量args指向此tuple对象
**参数也就是**kwargs收集所有未匹配的关键字参数组成一个dict对象,局部变量kwargs指向此dict对象

def temp(*args,**kwargs):
	print(args) #() 如果不传入参数,则args是一个空的tuple	
	print(kwargs) #{} 如果不传入参数,则args是一个空的tuple	
    pass
def function(default = 1,*args,**kwargs):
    print(default)
    print(args)
    print(kwargs)
    print("function")

function("w",1,3,4,self = 2)

#w
#(1, 3, 4) 收集所有未匹配的位置参数
#{'self': 2} 收集所有关键字参数
#function

作为函数调用时:解包功能

*参数用于解包tuple对象的每个元素,作为一个一个的位置参数传入到函数中

my_tuple = ("w","y","z")
 
temp(*my_tuple)
#---等同于---#
temp("w","y","z")

**参数用于解包dict对象的每个元素,作为一个一个的关键字参数传入到函数中

my_dict = {"name":"wangyuanwai","age":32}
 
temp(**my_dict)
#----等同于----#
temp(name="wangyuanwai",age=32)

定义函数时候,参数*args在前,**kwargs在后,*args和**kwargs组合起来可以传入任意的参数。

Python函数 — 位置参数和关键字参数

*args例子

*args作为参数 定义函数 收集所有未匹配的参数,封存在一个list里

def print_str(first, *second):
    print(first)
    print(second)
# 定义一个函数,*second作为不定参数

此时我们只传入一个参数

print_str("hello")

输出会是

hello
()

传入的第一个字符串参数"hello"打印出来了,没有传入参数的*second则打印的是一个tuple对象的字符串表示形式,即一个括号"()" 。 注意:()表示含有0个元素的tuple对象!

函数调用时的 *args 进行解包

调用print_str()函数时,直接传入一个 *参数会发生什么?

def print_str(first, *second):
    print(first)
    print(second)
numbers_strings = ("1","2","3","4","5")
print_str(*numbers_strings)

输出结果为:

1
('2', '3', '4', '5')

*numbers_strings出现在函数调用时,称为解包(一个“*”字符后面紧挨着1个tuple对象),numbers_strings自身是一个tuple对象,所以也称为元组的解包,tuple中的元素解包成一个一个的位置参数传入到函数中,所以才有下面两个语句的相等性!

**kwargs例子

函数定义中,参数名称前有两个** 收集所有未匹配的参数,封存在一个字典里

在这里插入图片描述
定义一个函数,这里用到了*args 和 **kwargs

def printStr(first,second,*args,**kwargs):
    print(first)
    print(second)
    print(args)
    print(kwargs)

然后进行函数的调用,

printStr('first','second','third','fourth',fifth = '5')

输出结果为:

first
second
('third', 'fourth')
{'fifth': '5'}

kwargs字典收集了{‘fifth’: ‘5’}这个键值对。当然,在写函数的时候,如果需要取得这个’fifth’: ‘5’,使用字典的get()方法比较好。
在这里插入图片描述

函数调用时,传入的关键字参数有匹配的位置参数时,则位置参数优先使用(匹配)这些关键字参数,剩余所有未使用(未匹配)的关键字参数会在函数内组装进一个dict对象中,组装后dict对象会赋值给变量名anything,此时局部变量anything指向一个dict对象

注意:**参数只收集未匹配的关键字参数

函数调用时使用字典解包功能(dict对象前加**)

def printStr(first, **dict):
    print(str(first) + "\n")
    print(dict)

传入一个字典,用**进行解包

printDic = {"name": "tyson", "age":"99"}
printStr(100, **printDic)

相当于

printDic = {"name": "tyson", "age":"99"}
printStr(100, name = "tyson", age = "99") 

又一个例子

my_dict = {"name":"wang","age":32}
 
temp(**my_dict)
#----等同于----#
temp(name="wang",age=32)
Python 函数专题:可变参数详解 在 Python 中,函数的参数可以是固定的,也可以是可变的。可变参数允许函数接受任意数量的参数,这在处理不确定数量的输入时尤其有用。*args和**kwargs。可变参数是 Python 函数设计中的一个重要特性,它提供了灵活性和便利性。在处理不确定数量的输入时,*args和**kwargs可以极大地简化函数的实现和调用。通过合理使用可变参数,程序员可以编写出更加简洁、灵活和可读的代码。通过本文的学习,相信你对 Python 中的可变参数有了更深入的理解。 阅读详情

相关推荐

Python中的可变参数(**):使用灵活的参数传递方式

可变参数(**kwargs)是Python中一种非常有用的功能,它允许我们在函数调用时传递任意数量的关键字参数。在编写函数时,如果需要处理不确定数量的关键字参数,可变参数是一个非常有用的工具。Python中的可变参数(**)是一种强大的功能,它允许我们在函数调用时传递任意数量的关键字参数。可变参数的主要优势在于它提供了更灵活的参数传递方式,允许我们在调用函数时传递任意数量的关键字参数。如果我们使用可变参数,可以根据学生的具体情况传递不同的关键字参数,从而灵活地计算总成绩。可变参数的定义和语法。

2301_79365003的博客 302

Python——参数函数(可变参数)

Python——参数函数(可变参数)

qq_66603712的博客 4494

Python可变参数使用详解:*args和**kwargs

其中,*args是一种用于表示一个非键值对的可变参数列表,而**kwargs则是一种用于表示一个以关键字参数的形式传入的可变参数字典。在上述代码中,我们定义了一个sum函数,其接收任意数目的以关键字参数形式传入的参数,并将这些参数相加后返回总和。需要注意的是,**kwargs只能作为函数定义中的最后一个参数,且在函数调用时只能使用关键字参数。此外,如果传入的关键字参数中包含和函数定义中相同的名称,则会覆盖原有的定义。需要注意的是,*args只能作为函数定义中的最后一个参数,且在函数调用时只能使用位置参数。

. 677

python 中参数*args, **kwargs

python 中参数*args, **kwargs def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '---------------------------------------' if __name__ == '__main__': foo(1,2,3,4)

anhuidelinger的专栏 2万+

Python中的可变参数:*args和**kwargs

在上面的示例中,我们定义了一个名为my_function的函数,并使用**kwargs作为参数。当我们调用该函数并传递多个关键字参数时,**kwargs会将这些参数打包成一个字典,然后在函数内部进行迭代处理。在上面的示例中,我们定义了一个名为my_function的函数,并使用*args作为参数。在上面的示例中,我们定义了一个名为my_function的函数,并使用*args和。args和**kwargs,以处理同时包含非关键字参数和关键字参数的情况。kwargs会接收关键字参数并以字典的形式进行处理。

NoerrorCode的博客 163

ENSP:小型企业网络拓扑设计

包含的技术:ospf、dhcp中继、ac+ap、vrrp+mstp、acl、浮动路由、静态路由、vlan划分

weixin_45921302的博客 1万+

python函数(5)— 可变参数 *args 和 **kwargs

方法1,调用函数时传入的参数,其中参数1传给了位置参数argument,参数2,3,4没有匹配到对应的位置参数,被装入到一个元组tuple中,参数args指向这个tuple对象。方法2,使用解包的方式,*tuple会将元组对象解包成一个一个位置参数传入到函数中。方法1,调用函数时传入的参数,没有匹配的关键字参数,被装入到一个字典dict中,参数kwargs指向这个dict对象。方法1,调用函数时传入的参数,没有匹配到位置参数,被装入到一个元组tuple中,参数args指向这个tuple对象。...

个人博客 1万+

【数字电源/MATLAB+PLECS】如何进行 Buck 数字电源仿真(二)PLECS 搭建开环 Buck 功率级

本文介绍了如何在PLECS中搭建开环Buck功率级模型,验证数字电源设计的基本思路。重点内容包括: 明确开发顺序:先开环验证功率级,再闭环设计控制器 搭建关键组件:输入电源、PWM模块、MOSFET开关、续流二极管、LC滤波电路及负载 设置初始参数:24V输入、12V输出、200kHz开关频率、22μH电感、100μF电容 测量关键波形:MOSFET Vds验证开关动作、电感电流纹波和输出电压稳态值 提供完整仿真模型和GitHub资源,便于读者复现验证 文章强调通过开环测试先确保功率级正确性,为后续闭环控制

weixin_43234123的博客 1222

终于弄懂了Python可变参数:*args与**kwargs

调用者可以传递任意数量的关键字参数,函数会将这些参数封装在一个字典中,其中参数名作为字典的键,对应的值作为字典的值。通过理解和使用可变参数,我们可以极大地提高函数的灵活性,避免在函数定义时限定死参数的个数。例如,编写一个统计各种指标的函数,如果这些指标的个数和名称都是未知的,那么使用。在Python中,可变参数是一种灵活且强大的特性,它使得函数可以处理任意数量的输入参数。需要注意的是,在参数顺序中,会将所有传递的关键字参数封装为一个字典,函数可以对该字典进行遍历来访问参数的名称和对应的值。

分享人工智能领域原创文章 1539

深入解析Dataloader中shuffle机制与随机种子对模型训练的影响

本文深入探讨了Dataloader中shuffle机制与随机种子对机器学习模型训练的影响。通过实际案例分析,详细解释了数据打乱顺序的必要性、随机种子的正确设置方法以及两者协同工作的原理,帮助开发者避免常见陷阱并提升模型训练效果。

weixin_29166013的博客 142

单细胞分析避坑指南:你的Harmony批次矫正真的做对了吗?

本文深入探讨了单细胞转录组分析中Harmony批次矫正的正确使用方法,解析了其工作原理及常见误区。通过详细参数调优指南和实战案例,帮助研究者避免过度矫正,确保生物学信号的有效保留。特别关注Harmony在单细胞数据分析中的关键参数设置和结果验证方法。

weixin_31099291的博客 299

Python可变参数:*args 与 **kwargs 用法

本篇文章将从语言设计理念、语法结构、工程实践、函数式编程到自动化测试等多个维度,深入剖析 *args 与 **kwargs 的本质、用法、优势与陷阱,并通过典型代码示例与实际场景对比,帮助读者掌握这一 Python 中极具表现力的技术手段。

测试者家园 1109

联想ThinkPad声卡驱动安装避坑指南:从E470到X1 Carbon的通用解法

本文详细介绍了ThinkPad声卡驱动安装的全流程,从硬件识别到驱动获取、安装技巧及深度排错。涵盖E470到X1 Carbon等不同机型的通用解法,帮助用户解决音频驱动问题,提升使用体验。重点讲解了声音驱动的精准识别和安装策略,确保系统稳定运行。

weixin_29207439的博客 711

Python 可变参数 *args 和关键字可变参数 **kwargs

Python *args, **kwargs (keyword arguments) 1.函数传递中 *args, **kwargs 含义是什么 用来处理可变参数(当不确定函数有多少个参数或者传多个时候就会非常方便) 可变参数 *args 被打包成 tuple 元组 关键字可变参数 **kwargs 被打包成 dict 字典 ①可变参数实例: # 什么是 args? def prin...

晓康的博客 863

STM32驱动HC-SR04超声波模块:两种精准测距方案详解

本文详解STM32驱动HC-SR04超声波模块的两种精准测距方案:定时器中断计数法和外部中断边沿检测法。涵盖硬件连接、代码实现与优化技巧,帮助开发者根据精度和复杂度需求选择合适方案,提升超声波测距在嵌入式项目中的稳定性和准确性。

g5h6i的博客 685

基于 STM32 单片机的实验室多参数安全监测系统设计与实现

本系统以 STM32F103C8T6 单片机为核心,集成温湿度监测、烟雾检测、气体泄漏报警、人体移动监测等功能模块,通过 OLED 显示屏实时显示数据,并支持 Wi-Fi 远程传输。系统可对实验室异常环境参数(如高温、烟雾、燃气泄漏)及非法入侵实时报警,保障实验室安全。本文从硬件选型、电路设计到软件实现提供了完整的实验室安全监测系统方案,可根据实际需求调整传感器类型和通信方式,适用于科研、教学等场景的环境安全防护。:可增加继电器模块控制通风设备或切断电源,集成 ZigBee 组网实现多实验室联动监测。

weixin_42300449的博客 1285

Python函数可变参数*args及**kwargs详解

Python函数可变参数*args及**kwargs详解 初学Python的同学们看到代码中类似func(*args, **kwargs)这样的函数参数定义时,经常感到一头雾水。 下面通过一个简单的例子来详细解释下Python函数可变参数*args及**kwargs,先给出标准答案: 1. *args是arguments单词缩写,表示任意多个无名参数,是一个tuple,如 (1,2,3,'a','b','c') 2. **kwargs是keyword arguments单词缩写,表示关键字参数,是一

feelinghappy的专栏 2074

Python 爬虫实战:Boss直聘 Python 岗位招聘数据爬取

本文介绍了一个Python爬虫项目,用于抓取Boss直聘平台的Python岗位招聘数据并进行可视化分析。项目采用requests库发送POST请求,通过抓包分析获取JSON接口,绕过HTML解析直接获取结构化数据。主要内容包括: 接口分析:找到关键POST接口,解析请求头和JSON参数格式 环境准备:安装requests/pandas/matplotlib/pyecharts等依赖库 核心实现: 手动获取登录Cookie 构建请求头和城市代码映射 实现分页抓取职位列表数据 项目特色在于直接解析JSON接口而

u014481728的博客 298

python函数如何实现可变参数_Python函数可变参数*args及**kwargs详解

初学Python的同学们看到代码中类似func(*args, **kwargs)这样的函数参数定义时,经常感到一头雾水。下面通过一个简单的例子来详细解释下Python函数可变参数*args及**kwargs,先给出标准答案:1. *args是arguments单词缩写,表示任意多个无名参数,是一个tuple,如 (1,2,3,'a','b','c')2. **kwargs是keyword argu...

weixin_39890102的博客 562

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

python args_Python可变参数*args和**kwargs用法实例小结

本文实例讲述了Python可变参数*args和**kwargs用法。分享给大家供大家参考,具体如下:一句话简单概括:当函数的参数不确定的时候就需要用到*args和**kwargs,前者和后者的区别在于,后者引入了”可变”key的概念,而前者没有key的概念,具体看下面的使用样例和具体的解释即可:#!usr/bin/env python#encoding:utf-8'''''__Author__:沂...

weixin_39636610的博客 158

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

python 可变参数函数定义* args和**kwargs的用法

python函数可变参数 (Variable Argument) 的方法:使用*args和**kwargs语法。其中,*args是可变的positional arguments列表,**kwargs是可变的keyword arguments列表。并且,*args必须位于**kwargs之前,因为positional arguments必须位于keyword arguments之前 下面一个例

github_37761578的博客 8269

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【python基础】四、python函数 可变参数 *args**kwargs

笔记 基础概念 python包 packages.py 项目: 包1 xx1.py xx2.py … 包2 xx1.py xx2.py … 函数.py def 函数名([参数, 参数, ]): 函数体 调试 先打断点 shift + F9 step over (F8) step into F7 step into mycode force step into st...

iShooting的博客 1154

深入探索和理解python的 *args 和**kwargs 可变参数

本文主要内容: 可变参数的定义 理解参数传递(*)星号 *args 非键值可变参数的定义 理解参数传递(**)双星号 **kwargs 键值可变参数的定义 可变参数的混合调用和定义 1.可变参数定义 定义函数时,有时候我们不确定调用的时候会多少个参数,就可以使用可变参数 def func(required_arg, default_arg=None, *args, **kwargs): ...

学渣集散地 415

Python函数:可变参数*args与**kwargs全解析

本文详细解析了Python函数中的*args和**kwargs参数机制,它们是处理可变数量参数的强大工具。*args用于接收任意数量的位置参数,打包成元组;**kwargs用于接收任意数量的关键字参数,打包成字典。文章通过多个实用示例展示了它们的应用场景,包括日志记录、数学运算、数据统计和条件过滤等,并介绍了三种常见使用模式。掌握这两个参数机制是编写灵活Python函数的关键,也是理解装饰器、API封装等高级特性的基础。

输出倒逼输入,写作驱动成长。 6440

python可变参数*args和**kwargs

#可变参数*args #help(print)(与ctrl_b相同) #print(print.doc)魔法方法 def person_info(*args): print(args)#在不确定参数的个数时 for i in args: print(i) person_info(12,13)#把传入的位置参数打包成元组 #(12, 13) #可变参数**kwargs def person_info...

weixin_44737399的博客 203

Python中的可变参数*args和**kwargs

#!/usr/bin/env python #-*- coding:utf8 -*- """ *args和**kwargs这两个参数是Python中的可变参数。 *args是一个tuple,表示任意多个无名参数(non-keyword arg); **kwargs是一个dict,表示任意多个关键字参数(keyword arg)。 同时使用*args和**kwargs时,必须*args参

907
上一篇: 【Python】字典dict 基础用法
下一篇: 【Python】JSON模块的使用
熟练的魔法师
博客等级 码龄8年 2714粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值