1. *args与**kwargs

*args:接收不确定长度的位置参数(即实参可能为0个、一个或多个),并将所有接收到的位置参数打包成一个元组,传入args参数

**kwargs:接收不确定长度的关键字参数,并将所有接收到的关键字参数打包成一个字典,传入kwargs参数

【有关于位置参数和关键字参数的区别可以看这里——一文快速理解Python函数中形参、实参、位置参数及关键字参数的概念】

2. 使用*args传递不定长位置参数

首先我们来看一个通过使用*args来传递加数的求和函数的实现。

def sum_num(*args):print("args:", args)print("The type of parameter arg is:", type(args))result = 0for num in args:result += numreturn resultsum_result = sum_num(1, 3, 5, 8)
print("The sum of the input numbers is:", sum_result)
------------------------------------------------------
args: (1, 3, 5, 8)
The type of parameter arg is: <class 'tuple'>
The sum of the input numbers is: 17

此例中,函数通过*args分别接受了4个加数,分别是1、3、5、8并将其打包存在参数args中,参数args的类型是元组,args=(1, 3, 5, 8)。通过一次for循环,我们实现了对args中所有参数的遍历并求和。

需要注意的是*args只接收位置参数,如果想向其传入关键字参数将会出现错误,显示该函数并不期望获得一个关键字参数。

def sum_num(*args):print("args:", args)print("The type of parameter arg is:", type(args))result = 0for num in args:result += numreturn resultsum_result = sum_num(1, 3, 5, a=8)
print("The sum of the input numbers is:", sum_result)
--------------------------------------------------------------------------
Traceback (most recent call last):File "C:/Users/asus1/PycharmProjects/test/test.py", line 10, in <module>sum_result = sum_num(1, 3, 5, a=8)
TypeError: sum_num() got an unexpected keyword argument 'a'

那如果想向函数传入不定长的关键字参数的话,我们就可以通过**kwargs来实现。

3. 使用**kwargs传递不定长关键字参数

在此同样以上文的求和函数为例,我们将每个传入的加数都变为关键字参数,首先观察一下参数kwargs。

def sum_num(**kwargs):print("kwargs:", kwargs)print("The type of parameter kwarg is:", type(kwargs))# result = 0# for num in kwargs:#     result += num# return resultsum_num(a=1, b=3, c=5, d=8)
-----------------------------------------------------------
kwargs: {'a': 1, 'b': 3, 'c': 5, 'd': 8}
The type of parameter kwarg is: <class 'dict'>

可以从控制台输出看到,当函数通过**kwargs接收关键字参数时,会将其打包成一个字典形式存入kwargs中,因此如果仍想实现对传入参数的求和,应当遍历字典中的所有值并实现加和,修改后的代码如下所示。

def sum_num(**kwargs):print("kwargs:", kwargs)print("The type of parameter kwarg is:", type(kwargs))result = 0for num in kwargs.values():result += numreturn resultsum_result = sum_num(a=1, b=3, c=5, d=8)
print("The sum of the input numbers is:", sum_result)
------------------------------------------------------------
kwargs: {'a': 1, 'b': 3, 'c': 5, 'd': 8}
The type of parameter kwarg is: <class 'dict'>
The sum of the input numbers is: 17

P.S.此处想要传递不定长位置参数或关键字参数不是必须以args和kwargs作为参数名,但是我们约定俗成地将这两个参数名作为传递不定长位置参数和关键字参数的名字。

为了方便大家理解,最后我们通过改变参数名实现一个简单的小应用o(∩_∩)o~

4. 打印著名艺人吴意饭(化名)的简要个人信息

def kris_info(*nicknames, **info):print("吴意饭昵称")print("、".join(nicknames))print("\n吴意饭个人信息")for key, value in info.items():print("{}:{}" .format(key, value))kris_info('加拿大电鳗', '吴签', '牙签', 名字='吴意饭', 名言='我的很大,你忍一下~',作品='《有一个地方只有我们知道》《从此以后》《大碗牢饭》')
-------------------------------------------------------------------------------
吴意饭昵称
加拿大电鳗、吴签、牙签吴意饭个人信息
名字:吴意饭
名言:我的很大,你忍一下~
作品:《有一个地方只有我们知道》《从此以后》《大碗牢饭》

可以看到,这里我们分别通过*nickname和**info来传递吴意饭的昵称和个人信息而非原先的*args和**kwargs。

需要注意的是:在传参时位置参数必须在关键字参数之前,否则就会像下面这样子报错,显示关键字参数在位置参数之后为语法错误。

def kris_info(*nicknames, **info):print("吴意饭昵称")print("、".join(nicknames))print("\n吴意饭个人信息")for key, value in info.items():print("{}:{}" .format(key, value))kris_info(名字="吴意饭", 名言='我的很大,你忍一下~', 作品='《有一个地方只有我们知道》《从此以后》《大碗牢饭》',"加拿大电鳗", "吴签", "牙签")
----------------------------------------------------------------------------------------------------------File "C:/Users/asus1/PycharmProjects/test/test.py", line 10"加拿大电鳗", "吴签", "牙签")^
SyntaxError: positional argument follows keyword argument

Python函数不定长参数之*args与**kwargs相关推荐

  1. Python 函数不定长参数

    1. 字典形式参数 出现带一个星号的参数 args,这是可变位置参数: 带两个星号的参数 kwargs,这是可变关键字参数. def test(x, y, *args, **kwargs):print ...

  2. python不定长参数怎么相加_python函数不定长参数使用方法解析

    这篇文章主要介绍了python函数不定长参数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 pathon中的函数可以使用不定长参数,可以 ...

  3. C语言 函数不定长参数 - C语言零基础入门教程

    目录 一.前言 二.函数不定长参数简介 1.va_start 2.va_arg 3.va_end 三.自定义不定长参数的函数 1.va_start/va_arg/va_end 案例一 2.va_sta ...

  4. C语言 函数不定长参数 ##__VA_ARGS__经典案例 - C语言零基础入门教程

    目录 一.##__VA_ARGS__简介 二.##__VA_ARGS__经典案例 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.## ...

  5. Python对于不定长参数的使用。

    对于多个参数的输入,以及对列表和字典的操作. 包裹位置参数,我们用(*args)函数是将输入的值传入一个列表中. (**kwrgs)则是传入到字典之中 编写函数,求解输入任意个数的同学(学号)输出各自 ...

  6. python3 函数 不定长参数 不定参

    第一种不定长参数*args *args 称为不定长参数,只能放在形参的最后位置,返回的是一个元组 def num(a,b,*args):print(a)print(b)print(args)num(1 ...

  7. python中的魔法参数:*args和**kwargs

    def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '------------------- ...

  8. python函数——形参中的:*args和**kwargs

    多个实参,放到一个元组里面,以*开头,可以传多个参数:**是形参中按照关键字传值把多余的传值以字典的方式呈现 *args:(表示的就是将实参中按照位置传值,多出来的值都给args,且以元祖的方式呈现) ...

  9. python函数可变长参数_day14 Python函数之可变长参数

    函数参数 1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元.因此,形参只在函数内部有效.函数调用结束返回主调用函数后则不能再使用该形参变量 2.实参可以是常量.变量.表 ...

  10. Python函数的可变参数传递(*args与**kwargs)

    文章目录 1. 题目

最新文章

  1. Docker配置远程连接端口
  2. 从放弃迅雷和IDM到自己开发下载工具
  3. Vivado simulation使用简介
  4. .net core HttpClient 使用之消息管道解析(二)
  5. 苹果第三代iPhone SE或将于12月份开始投产 明年春季发布
  6. 用 convert2rhel 工具将 CentOS 迁移至 RHEL
  7. 跳转后退_羽毛球后退步法常见问题及解决方法
  8. 微服务模式下API测试
  9. SpringCloud之良心入门干货(Eureka入门)
  10. 大学生毕业如何选择职业?
  11. 黑苹果hd630显存7m_一次黑苹果的折腾记录——修改缓冲帧,解决显存只有7M,正确驱动Intel核显...
  12. Docker快速入门-腾讯云
  13. ADO 笔记 ——关于RecordCount
  14. 新概念英语一 : 语法整理 unit1 1-18
  15. excel联系导入到手机通讯录(小米手机)
  16. es6--let和const
  17. 流程图中的实线_化工工艺流程图中的设备用细实线画出,主要物料流程线用粗实线画出。()_搜题易...
  18. 达梦数据库查询模式名,表名,字段名
  19. Python pyglet 自制3D引擎入门(一) -- 绘制几何体、创建3D场景
  20. Jsp制作企业后台数据库管理系统

热门文章

  1. 广域网的应用场景是什么?
  2. 谈谈如何做到从未来看向当代的能源技术
  3. 64位windows在安装winsdk过程中遇到的问题及解决方案
  4. 《玩儿起来吧》MATLAB 实时图像处理系列(一二三四)
  5. 【从嵌入式视角学习香山处理器】一、如何开始?(开发环境搭建)
  6. 每日工作问题记录总结(好习惯 打卡2/?)
  7. 天线基础知识(四)接收灵敏度
  8. 方差分解分析 (VPA):定量不同环境因子对群落变化的解释比例
  9. java 多线程数组越界_越界java数组
  10. 微信再次重大更新,同时支持5个浮窗展示,你怎么看?