【python基础】魔法参数*args, **kwargs的使用

这篇具有很好参考价值的文章主要介绍了【python基础】魔法参数*args, **kwargs的使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


前言

Python中传递可变参数的方式有两种,位置参数(positional argrment)和关键词参数(keyword argument)。
本文主要讲魔法参数 *args和 **kwargs 的如何使用,如何将不定数量的参数传递给一个函数和调用一个函数。


一、*args 和 **kwargs 是什么?

  • *args 和 **kwargs 都是python中的可变参数。
  • *args可以用来表示任何多个无名参数,本质上是tuple类型
  • **kwargs可以用来表示关键字参数,本质上是dict类型
def func1(*args,**kwargs):
	print(type(args))
	print(args)
	print(type(kwargs))
	print(kwargs)
func1(1,2,'hello world',a=4,b=6,c='oo',d=[])

【python基础】魔法参数*args, **kwargs的使用,python基础,python,开发语言

  • *args和 **kwargs 重要是前面的*,你也可以写 *var和**vars,而写成 *args和 **kwargs 只是程序员通俗写法。
def func1(*var,**var2):
	print(type(var))
	print(var)
	print(type(vars))
	print(vars)
func1(1,2,'hello world',a=4,b=6,c='oo',d=[])

运行结果跟上面的使用*args和 **kwargs的一致。

  • *args参数必须在**kwargs前面,因为位置参数必须在关键词参数前面。

如果把**kwargs放在*args前面,会报错:无效引用。

def func1(**kwargs,*args):
	print(type(args))
	print(args)
	print(type(kwargs))
	print(kwargs)
func1(a=4,b=6,c='oo',d=[],1,2,'hello world')

【python基础】魔法参数*args, **kwargs的使用,python基础,python,开发语言


二、*args 的用法

打包参数:将不定数量的参数传递给一个函数

举例1: 将非键值的可变数量的参数列表给一个函数。

def func1(*args):
	for i in args:
		print("arg throuth args:{}".format(i))
func1(1,2,3,4,5)

【python基础】魔法参数*args, **kwargs的使用,python基础,python,开发语言

举例2: 函数接受实参时,按顺序分配给函数形参,如果遇到带∗的形参,那么就把还未分配出去的实参以元组形式打包(pack),分配给那个带∗的形参。

def func1(x,*args):
	print("a:{}".format(x))
	print("number:{}".format(args))
	print(type(args))
func1(1,2,3,4,5)

【python基础】魔法参数*args, **kwargs的使用,python基础,python,开发语言

从例子中可以看出,args接受了实参变成了(2,3,4,5),第一个参数1被形参接受走了。

def func1(x,y,*args):
	print("a:{}".format(x))
	print("b:{}".format(y))
	print("number:{}".format(args))
	print(type(args))
func1(1,2,3,4,5)

【python基础】魔法参数*args, **kwargs的使用,python基础,python,开发语言

从例子中可以看出,args接受了实参变成了(3,4,5),第一个参数1被形参x接受走了,第二个参数2被形参y接受走了。

举例3: 如果把*args放在位置参数前面,需要将在参数传入时,明确定义 *args后面的位置参数定义,否则会报错。

把 *args放在前面

def func1(*args,x,y):
	print("a:{}".format(x))
	print("b:{}".format(y))
	print("number:{}".format(args))
	print(type(args))
func1(1,2,3,x=4,y=5)

【python基础】魔法参数*args, **kwargs的使用,python基础,python,开发语言

把 *args放在中间

def func1(x,*args,y):
	print("a:{}".format(x))
	print("b:{}".format(y))
	print("number:{}".format(args))
	print(type(args))
func1(1,2,3,4,y=5)

【python基础】魔法参数*args, **kwargs的使用,python基础,python,开发语言

拆分参数:调用一个函数

*args是把打包了的参数拆成单个的,依次赋值给函数的形参。

举例

def func1(arg1,arg2,arg3):
	print(arg1,'\n',arg2,'\n',arg3)
args=[1,2,3]
func1(*args)

【python基础】魔法参数*args, **kwargs的使用,python基础,python,开发语言


三、**kwargs 的用法

打包参数:将不定数量的参数传递给一个函数

**kwargs可以用来发送一个不定长度键值对的字典参数给一个函数。

举例

def func1(**kwargs):
	for key,value in kwargs.items():
		print("{0}=={1}".format(key,value))
func1(a=4,b=6,c='oo',d=[])

【python基础】魔法参数*args, **kwargs的使用,python基础,python,开发语言

拆分参数:调用一个函数

**kwargs是把字典的键值拆成单个的,依次赋值给函数的形参。

举例

def func1(arg1,arg2,arg3):
	print(arg1,'\n',arg2,'\n',arg3)

kwargs={'arg1':1,'arg2':2,'arg3':3}
func1(**kwargs)

【python基础】魔法参数*args, **kwargs的使用,python基础,python,开发语言


四、位置参数、*args 和 **kwargs 的组合使用

位置参数、*args、**kwargs 三者的顺序 必须是: 位置参数、*args、**kwargs

举例

def func1(x,*args,**kwargs):
	print(x)
	print(args)
	print(kwargs)
func1(1,2,3,4,a='hh',b='worl',c='soda')

【python基础】魔法参数*args, **kwargs的使用,python基础,python,开发语言


参考文档:
https://blog.csdn.net/GODSuner/article/details/117961990
https://zhuanlan.zhihu.com/p/51236818文章来源地址https://www.toymoban.com/news/detail-741050.html

到了这里,关于【python基础】魔法参数*args, **kwargs的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Jetpack】Navigation 导航组件 ④ ( Fragment 跳转中使用 safe args 安全传递参数 )

    代码地址 : CSDN ( 本博客代码快照 | 推荐下载 0 积分 ) : https://download.csdn.net/download/han1202012/88251933 GitHub ( 可能已经覆盖 ) : https://github.com/han1202012/Navigation 1、Navigation 组件中的 Bundle 数据传递 之前的 默认 Navigation 跳转方法 , 只需要传入 navigation 资源 ID , 即可完成页面跳转 ; Nav

    2024年02月11日
    浏览(42)
  • C++11可变参数模板(typename... Args模板参数包或class... Args)(Args... args函数参数包)(递归展开与参数包展开(只支持C++17))

    C++可变参数是指函数的参数个数是可变的,可以在函数定义时不确定参数的个数,需要在函数体内通过特定的语法来处理这些参数。C++11标准引入了新的可变参数模板,使得可变参数的处理更加方便和灵活。在函数定义时,可以使用省略号(…)来表示可变参数,然后通过va_li

    2024年02月08日
    浏览(45)
  • ...args: any[] TypeScript 中的剩余参数语法

    ...args: any[] 是 TypeScript 中的剩余参数语法,也称为剩余参数(Rest Parameters)。 在函数参数列表中, ...args 表示将剩余的参数收集到一个数组中,这个数组的类型是 any[] ,即任意类型的数组。 例如: 在调用 foo 函数时,你可以传递任意数量的参数: 在函数内部, args 是一个包

    2024年02月09日
    浏览(38)
  • 如何给Java中的main函数参数args传参

    创建java测试类: JAVA类中main函数的参数String [] args,指的是运行时给main函数传递的参数。 传参的方式有以下几种: 1、idea工具的测试类中,左上角菜单中点击Run,选择Edit Configurations…,找到Program Arguments,添加参数   参数添加成功后,运行Java测试类后,结果如下:   2、

    2024年02月08日
    浏览(41)
  • 自动化理论基础(2)—开发语言之Python

    一、知识汇总 掌握 Python 编程语言需要具备一定的基础知识和技能,特别是对于从事自动化测试等领域的工程师。以下是掌握 Python 的一些关键方面: 基本语法: 理解 Python 的基本语法,包括变量、数据类型、运算符、条件语句、循环语句等。 数据结构: 熟悉并能够使用

    2024年01月18日
    浏览(61)
  • Go命令行参数操作:os.Args、flag包

    最近在写项目时,需要用到命令行传入的参数,正好借此机会整理一下。 运行之后的结果: 可以看到,命令行参数包括了程序路径本身,以及通常意义上的参数。 程序中os.Args的类型是 []string ,也就是字符串切片。所以可以在for循环的range中遍历,还可以用 len(os.Args) 来获取

    2024年02月08日
    浏览(38)
  • 鸿蒙4.0开发笔记之ArkTS语法基础的UI描述、基础组件的使用与如何查看组件是否有参数(八)

    在HarmonyOS的ArkTS语法中,万物皆组件。ArkTS以声明方式组合和扩展组件来描述应用程序的UI,同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑。根据组件构造方法的不同,创建组件包含有参数和无参数两种方式。 1、无/有参数组件 无参数组件:

    2024年02月03日
    浏览(40)
  • python基础----05-----函数的多返回值、函数的多种参数使用形式、函数作为参数传递、lambda匿名函数

    分为以下四种。 位置参数调用函数时根据函数定义的参数位置来传递参数,传递的参数和定义的参数的顺序及个数必须一致。 函数调用时通过“键=值”形式传递参数。 作用:可以让函数更加清晰、容易使用,同时也清楚了参数的顺序需求。 注意: 函数调用时,如果有位置参

    2024年02月08日
    浏览(53)
  • Stable Diffusion WebUI中COMMANDLINE_ARGS参数配置说明

    在webui-user.bat文件的set COMMANDLINE_ARGS=后面配置 在webui-user.sh文件的export COMMANDLINE_ARGS=\\\"\\\"引号中配置 配置(Configuration) -h, –help 无 错误 显示此帮助消息并退出 –config 配置 配置/稳定扩散/v1-inference.yaml 构建模型的配置路径 –ckpt CKPT 模型.ckpt 稳定扩散模型检查点的路径;如果指定

    2024年02月09日
    浏览(50)
  • [Java SE] 彻底搞懂Java程序的三大参数配置途径:系统变量与JVM参数(VM Option)/环境变量/启动程序参数args

    一次没搞懂,处处受影响。这个问题属于基础问题,但又经常踩坑,不得不重视一下了。 IDEA中的配置位置 参数 使用方式 示例 代码获取方式 系统属性 由操作系统、JVM、应用程序主动设置 System.setProperties(Properties propes) / System.setProperties(String key,String value) / System.getProperties(

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包