文章目录

  • 1 简介
  • 2 问题
  • 3 分析
  • 4 示例扩展
  • 5 小结

1 简介

在Python的函数定义中, 我们可以看到有类似 fun(v1, *args, **kwargs) 这样的内容,其中*args, **kwargs 到底指什么,本文将通过一个实例进行简介。

2 问题

回答*args, **kwargs 到底指什么之前,我们先看这样一个问题:
假设有这样的一个函数:fun('test', id=1035, name="Jack", birthday='1992/03/12', sex='m', height='182', weight='75.2kg')。这个函数有很多的参数,而且参数的个数可能不固定,那么如果让你来设计这个函数,怎样设计函数 fun 最简单呢?

3 分析

答案是使用 **kwargs 进行定义,函数可以定义为:

def fun(s, **kwargs):print(s.center(40, '*'))for key in kwargs:print(key + ':', kwargs[key])

则调用后显示为:

******************test******************
id: 1035
name: Jack
birthday: 1992/03/12
sex: m
height: 182
weight: 75.2kg

可以看到传送的参数都被整合到了字典 **kwargs 中,而在函数体内,可以以字典的操作方式对args进行操作。

类似的,如果参数中不带变量名,比如:fun1('fun1', 1, 2),这时使用字典就因为缺少键值而无法接收,但是可以使用列表接收,方式是只写一个星号,即 fun1(s, *args),则 *args 中会按顺序接收未指定的参数,其数据类型为 list 类型。

另外,要特别指出一点,*args**kwargs 的名称不是固定的,只要是使用了个星号就是列表,两个星号就是字典,比如列表可以定义为 *kvs, *arg_list,而 **kwargs 可以定义为 **kvs。关于默认的名称,args 是 arguments(参数)的缩写,而 kwargs 是 keyword arguments 的缩写。

4 示例扩展

下面看一个完整的示例:

def fun1(s, *args_list):  # 这里*args_list表示列表参数print(s.center(40, '*'))print('type(args_list): ', type(args_list))print(args_list)def fun2(s, **kwargs_dict): # 这里*args_dict表示字典参数print(s.center(40, '*'))print('type(args): ', type(args))for key in args:print(key + ':', args[key])
def fun3(s, *args_list, **kwargs_dict):print(s.center(40, '*'))print('type(args_list): ', type(args_list))print('type(args_dict): ', type(args_dict))print(args_list)for key in args_dict:print(key + ':', args_dict[key])fun1('fun1', 1, 2)
fun2('fun2', id=1035, name="Jack", birthday='1992/03/12', sex='m', height='182', weight='75.2kg')
fun3('fun3', 1, 2, 'hello', id=1035, name="Jack", birthday='1992/03/12', sex='m', height='182', weight='75.2kg')

以上代码输出为

******************fun1******************
type(args_list):  <class 'tuple'>
(1, 2)
******************fun2******************
type(args):  <class 'dict'>
id: 1035
name: Jack
birthday: 1992/03/12
sex: m
height: 182
weight: 75.2kg
******************fun3******************
type(args_list):  <class 'tuple'>
type(args_dict):  <class 'dict'>
(1, 2, 'hello')
id: 1035
name: Jack
birthday: 1992/03/12
sex: m
height: 182
weight: 75.2kg

5 小结

所以 *args 是用于接收多个不定长度的参数作为列表传入,而 **kwargs 则是将同时带有键和值的传入参数作为字典进行统一处理。

Python中的两种函数可变长度参数类型:*args, **kwargs相关推荐

  1. python函数分几种_简单了解Python中的几种函数

    python是支持多种范型的语言,可以进行所谓函数式编程,其突出体现在有这么几个函数: filter.map.reduce.lambda.yield lambda lambda函数的使用方法:在lam ...

  2. python提供了两种基本的数值类型_python数据分析(一) python当中的数据类型--数字和常用函数...

    python当中内置了多种数据类型,了解python内置的基本数据类型,有助于进行进行数据处理.第一篇我们将介绍python当中的数字. 我们将介绍每一种数字类型,他们适用的操作符,以及用于处理的内建 ...

  3. Python中的两种路径

    Java中有两种路径,一种是操作系统的路径path,另一种是类路径classpath. Python中也是如此,一种是操作系统环境变量中的path,另一种是PYTHONPATH. 当import xx ...

  4. Python中的排除sort函数的参数key:a.sort(key=lambda x: x[1])是什么意思

    a.sort(key = lambda x : x[1]) 上述代码指的是: sort排序函数中传入参数key,key的值为匿名函数lambda的返回值,匿名函数中的第一个x为参数,x[1]为函数表达 ...

  5. python提供了两种基本的数值类型_Python 基本数据类型

    Python 基本数据类型 Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型&q ...

  6. python提供了两种基本的数值类型_Python基本数据类型

    欢迎来到子奇的小屋 你可知道Python有哪些基本数据类型? No.1 数字类型及操作 数字类型 可正可负,无取值范围 4种进制表示类型十进制:同阿拉伯数字 二进制:以0b或0B开头 八进制:以0o或 ...

  7. python提供了两种基本的数值类型_6.Python基础语法---02基础数据类型

    基础数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需 ...

  8. java参数类型不同_java – 两种不同的参数类型(将Object强制转换为Type)

    我想调用一个方法,但参数可以是Button或ImageButton.我用不同的参数类型作为对象调用该方法两次. 在我的方法attributesOfButton中,我想分配相应的按钮类型,如下面的代码所 ...

  9. python提供了两种基本的数值类型_Python的三种基本数据类型

    数字 int(整型) long(长整型),python对长整型没有限制,理论上可以无限大.python3后没有long了. float 字符串 加了引号的都是字符串. 单引号和双引号没有约束,尽量避免 ...

最新文章

  1. 与自定义词典 分词_如何掌握分词技术,你需要学会这些
  2. codeforces 650D. Zip-line 线段树
  3. java spring 服务器关闭_通过springboot怎么停止服务器??
  4. python经典好书-推荐几本高质量的Python书籍--附github下载路径
  5. Silverlight 游戏开发小技巧:轨迹跟随效果
  6. xStream完美转换XML、JSON
  7. java 多项式拟合最多的项数_python实现2019nCoV确诊数据拟合与预测
  8. 手机窃取PC信息,APT基础。
  9. (PotPlayer)Windows视频播放神器
  10. 第18次Scrum会议(10/30)【欢迎来怼】
  11. 最新ECSHOP解闷商城系统+休闲娱乐EC购物商城源码
  12. DIY 3.5毫米/MMCX接口的耳机线(无麦)
  13. 基于 OpenFlow 的 SDN 技术 (论文笔记)
  14. WebRTC的噪声抑制(noise suppression,NS)算法
  15. Photoshop使用教程 如何在线抠图
  16. 物联网——WIFI热点配网
  17. ML-czy的小组任务3
  18. 2021年中国医药CDMO重点企业对比(药明康德VS凯莱英VS博腾股份VS九洲药业)[图]
  19. 零基础如何学习自动化测试
  20. 算法题:用php生成excel列

热门文章

  1. vue脚手架使用pages快速构建一个多页应用
  2. python两台电脑网络互传信息,Python+pyftpdlib实现局域网文件互传
  3. linux使用MSMTP和Mutt从命令行发送电子邮件
  4. 靠谱的同步工具,记同步短信经历
  5. J10:JavaScript鼠标移入移出
  6. react鼠标移入移出样式修改
  7. 解决centos 7无法访问外网的问题
  8. python遍历文件夹列表 乱序
  9. FLink时间与窗口详解
  10. 二级c语言考试分值,计算机二级考试科目及分值设置 注意事项来看看