刚开始接触 python 的时候,对 python 中的 *wargs (可变参数) 和 **kwargs (关键字参数)的理解不是很透彻,看了一下 《Explore Python》一书,里面对这一部分的描述相对浅显易懂, 这里依据个人理解进行相关总结。

可变参数(*args)

对于可变参数可以联想到 C# 中的可变参数。可变参数是一个数量不确定的列表集合,可以是 list 类型,也可以是 tuple 类型
我们定义如下代码段:

def add(*numbers):print(type(numbers))sum = 0for i in numbers:sum += ireturn suma1 = (1, 2, 3, 4,)
print(add(*a1))a2 = [1, 2, 3, 4]
print(add(*a2))

通过运行上述代码,我们可以看出,无论我们是需要传递一个 list 集合还是 tuple 集合,在可变参数对应的函数内部都会作为 tuple 类型来处理。此外,我们还需要注意的是,我们需要传递的是集合的指针,而不是该集合对象,这是因为在 python 中,默认通过引用(也就是指针)进行函数的参数传递,这样做避免创建多个拷贝,并且能够按照方便地更新这些对象。
由于在含可变参数的函数内部,可变参数是作为 tuple 类型来处理的, 因此我们无法对其进行修改。我们可以通过创建一个 list 类型的集合临时变量,然后通过这个临时变量实现对传入的可变参数进行修改。

关键字参数(**kwargs)

关键字参数是一个由键值对组成的集合,允许通过变量名进行匹配,而不是位置。
我们定义如下代码段:

def add(**kwargs):print(type(kwargs))for key in kwargs:kwargs[key] += 1print('{0}:{1}'.format(key,kwargs[key]))
dic = {'x': 1, 'y': 2,'z': 3}
add(**dic)

运行上述代码,我们可以看出,kwargs 的类型为 dict ,因此我们需要用过 key-value 的方式来进行访问。当我们访问的 key 不在该参数列表中程序会发生响应。

综合运用

def test_args_kwargs(arg1, *args, **kwargs):print(arg1)for val in args:print(val)for k, v in kwargs.items():print("{0}:{1}".format(k, v))test_args_kwargs(1, [1, 2, 3], {"a": 1, "b": 2})

总结

*args 和 **kwargs 并不是 python 中的参数关键字,而是一种惯用写法。
在 python 中,函数参数主要分为:必选参数,默认参数,可变参数,关键字参数。必选参数必须赋值;默认参数可赋可不赋,如不赋值则传递默认的数值;可变参数传递的是一个参数列表,列表中的元素数量不确定;关键字参数是一个键值对集合,通过键值对的方式来进行数值传递。它们之间的排列顺序为:必选参数 -> 默认参数 -> 可变参数 -> 关键字参数。

转载于:https://www.cnblogs.com/hippieZhou/p/9898211.html

Python3 系列之 可变参数和关键字参数相关推荐

  1. python3函数参数(必选参数、默认参数、关键字参数、可变参数)

    python3函数参数 形参是参数在函数定义过程中的状态,这个过程中没有赋予实际的数值,实参是参数在函数调用过程中的状态,当参数被赋予实际的数值后,它会由形参转为实参. 必选参数在前,默认参数在后,默 ...

  2. Python3基础教程:可变参数和关键字参数

    可变参数(*args) 对于可变参数可以联想到 C# 中的可变参数.可变参数是一个数量不确定的列表集合,可以是 list 类型,也可以是 tuple 类型 我们定义如下代码段: def add(*nu ...

  3. 【Python-3.3】函数中的可变参数和关键字参数

    在Python中,函数的参数有以下几种:不可变参数.默认参数.可变参数.关键字参数. 这篇博文主要讲解可变参数和关键字参数. 1. 可变参数 可变参数顾名思义就是参数个数可以变化的参数,可以是0或多个 ...

  4. python3函数的参数:必选参数(位置参数)、默认参数、可变参数、关键字参数、命名关键字参数

    了解python函数的参数,是阅读各种库和源码的必需技能,请认真学习并掌握. 1.位置参数: def fn1(a):pass def fn2(a,b):pass msg: pass是占位符,当没有具体 ...

  5. python中可变参数和关键字参数_python的可变参数和关键字参数(*args **kw)

    本文是来自廖大的python教程其中我一直忘记的部分.算是一个笔记把.因为日常这俩参数名字一直搞混 可变参数 在Python函数中,还可以定义可变参数.顾名思义,可变参数就是传入的参数个数是可变的,可 ...

  6. python 可变参数 关键字参数_Python之 可变参数和关键字参数

    原标题:Python之 可变参数和关键字参数 刚开始接触 python 的时候,对 python 中的 *wargs (可变参数) 和 **kwargs (关键字参数)的理解不是很透彻,看了一下 &l ...

  7. python中关键字参数的特点_Python中的*可变参数与**关键字参数

    1.定义了一个需要两个参数的函数 def print_str(first, second): print first print second if __name__ == "__main_ ...

  8. python 关键字参数为什么只能出现在最后_Python笔记2——默认参数,可变参数,关键字参数,参数组合...

    1.借助抽象,我们才能不关心底层的具体计算过程,而直接在更高的层次上思考问题;写计算机程序也是一样,函数就是最基本的一种代码抽象的方式 2.abs()求绝对值的函数 3.cmp()比较两个值大小的函数 ...

  9. python疑问5:位置参数,默认参数,可变参数,关键字参数,命名关键字参数区别...

    1.位置参数 位置参数要求调用时传入函数的参数必须和定义时的位置和个数一致,即一一对应,不可缺省 def func(a,b):sum = a + breturn sum print(func(2,3) ...

最新文章

  1. 我的面试(四)补充1
  2. 原来 Kubernetes 部署如此简单,看完全明白了
  3. python graph_python graph什么意思
  4. java bean与xml转换_Java Bean与xml互相转换的方法分析
  5. SQL SERVER2000中订阅与发布的具体操作
  6. eureka集群只注册一个_Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇
  7. html button跳转页面_HTML常用标签
  8. 【报告分享】5G时代新型基础设施建设白皮书.pdf
  9. TSDF算法笔记(转)
  10. java随机函数用法Random(转)
  11. studying and learning
  12. Asp.Net MVC 控制器
  13. Android ListView焦点事件冲突问题与解决
  14. 非线性光纤光学_光学青年| 刘兆军教授与晶体光纤激光技术研究,做核心材料和器件...
  15. arduino红外遥控控制小灯
  16. android手机主板,主板芯片全解
  17. 驱动人生带你全方位领略微软Windows 11的魅力
  18. 只想听歌曲的高潮部分?让我用python来教你做个音乐高潮提取器!
  19. 关于mp4格式转m3u8切片加密的方案调研
  20. 计算机一级考试内容有哪些?

热门文章

  1. 关于mybatis返回前端日期格式化问题
  2. JavaEE之使用DOM4J和XPath对xml文档的添加,删除,查询操作
  3. Android中用图片自定义一个进度条(实现蒙板效果)
  4. UML图系列——UML概要
  5. 常见的排序算法(1)
  6. 2017年5月面试总结
  7. 计算机的u盘显示桌面,U盘图示在我的电脑显示不出?
  8. html按钮坐标,html-单选按钮位置CSS
  9. 这个文件传输神器完爆 FTP
  10. android tcp socket框架_最流行的 Web 框架 Gin 源码阅读