可变参数,或者学术点的讲法,叫参数收集;

  • (1)*args:表示普通的参数,也即位置参数(positional arguments),由元组存储
  • (2)**kwargs:key word args,则表示关键字参数(keyword arguments),由字典存储
def foo(*args, **kwargs):print('args = ', args)print('kwargs = ', kwargs)if __name__ == '__main__':foo(1,2,3,4)args =  (1, 2, 3, 4)kwargs =  {}foo(a=1,b=2,c=3)args =  ()kwargs =  {'b': 2, 'c': 3, 'a': 1}foo(1,2,3,4, a=1,b=2,c=3)args =  (1, 2, 3, 4)kwargs =  {'b': 2, 'c': 3, 'a': 1}foo('a', 1, None, a=1, b='2', c=3)args =  ('a', 1, None)kwargs =  {'b': '2', 'c': 3, 'a': 1}

1. *args:位置参数

*args:将参数组织成元组;

def print_params(*args):print(args)
>> print_params('Testing')
('Testing', )
>> print_params(1, 2, 3)
(1, 2, 3)

与普通参数的组合使用:

def print_params(title, *args):print(title)print(args)
>> print_params('Params', 1, 2, 3)
Params
(1, 2, 3)

2. **kw:关键字参数

将参数组织成字典;

def print_params(x, y, z=3, *parms, **kw):print(x, y, z)print(params)print(kw)
>> print_params(1, 2, 3, 5, 6, 7, foo=1, bar=2)
1 2 3
(5, 6, 7)
{'foo':1, 'bar':2}

我们可以使用这种方式创建字典:

def create_dict(**kw):return kw

3. 参数收集的逆过程

def add(x, y): return x+y
params = (1, 2)>>> add(*params)
3

同样适用于 **KW(关键字参数)

4. * 的另一妙用

def foo(*x):print(x)
>> foo(i for i in range(10))
(<generator object <genexpr> at 0x00000000035B4168>,)# 一个迭代器对象构成的 tuple
>> foo([i for i in range(10)])
([0, 1, 2, 3, 4, 5, 6, 7, 8, 9],)
>> foo(*(i for i in range(10)))
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
>> foo(*[i for i in range(10)])
(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)# 将可迭代对象中的元素进行解析

5. 解决一些问题

如何传递进只接受 3 个参数的函数多于 4 个的参数:

  • 方式之一

    def fun(a, b, c):print c
    fun(1, 2, (3, 4))
  • 方式之二:

    def fun(a, b, *c):print c[0]
    fun(1, 2, 3, 4)

Python 进阶 —— 可变参数(*args, **kw)与参数收集的逆过程相关推荐

  1. python的可变参数 *args 和关键字参数**kw

    *args:非关键字参数,传入任意个不需要包含参数名的参数,参数实际以tuple形式传入 **kw:是关键字参数,传入任意个要带参数名的参数,参数实际以dict传入 例子 >>> d ...

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

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

  3. python中可变参数*args_Python-可变参数和关键字参数(*args **kw)

    前言: Python的函数具备很是灵活的参数形态,既能够实现简单的调用,又能够传入很是复杂的参数.函数 可变参数和关键字参数的语法:code *args是可变参数,args接收的是一个tuple:ci ...

  4. python 可变参数 关键字参数_Python关键字及可变参数*args,**kw原理解析

    可变参数 顾名思义,函数的可变参数是传入的参数可以变化的,1个,2个到任意个.当然可以将这些 参数封装成一个 list 或者 tuple 传入,但不够 pythonic.使用可变参数可以很好解决该问题 ...

  5. Python-非关键字参数和关键字参数(*args **kw)

    Python的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数. 可变参数和关键字参数的语法: *args是可变参数,args接收的是一个tuple: **kw是关键字参数, ...

  6. Python进阶并发基础--线程,全局解释器锁GIL由来,如何更好的利用Python线程,

    全局解释器锁GIL 官方对于线程的介绍: 在 CPython 中,由于存在全局解释器锁,同一时刻只有一个线程可以执行 Python代码(虽然某些性能导向的库可能会去除此限制).如果你想让你的应用更好地 ...

  7. python def函数报错详解_【python】详解python函数定义 def()与参数args、可变参数*args、关键参数**args使用实例...

    Python内置了很多函数,可以直接调用.Python内置的函数可以通过官方文档查看.也可以通过help()查看帮助信息.函数名是指向函数对象的引用,把函数名赋给变量,相当于给函数起了别名. 1. 定 ...

  8. python教程:可变长参数(*args、**kwargs)、返回值(return)

    一.可变长参数 1.默认参数: 代码如下: def information_register(name, age, country, sex):print("---注册信息---" ...

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

    本文实例讲述了Python可变参数*args和**kwargs用法.分享给大家供大家参考,具体如下: 一句话简单概括:当函数的参数不确定的时候就需要用到*args和**kwargs,前者和后者的区别在 ...

最新文章

  1. 判断页面是否加载完成
  2. [Python图像处理] 三.获取图像属性、兴趣ROI区域及通道处理
  3. php 短信验证码对比,php短信验证码的3个优势,你知道是什么吗?
  4. 时间管理,从洗碗开始
  5. SAP License:会计->用友->金蝶->SAP,我的工作历程
  6. 修改ranger ui的admin用户登录密码踩坑小记
  7. 如何从一台铅封计算机上取走数据
  8. Java通过 JDBC 连接数据库操作
  9. 百旺智能编码_“智能编码”助手助您规范使用税收分类编码
  10. 天堂2服务端服务器名字修改,如何制作L2J天堂2单机版源码服务端教程.doc
  11. VC++实现镜像劫持(360保险箱启动原理)
  12. 智能机器人及其应用ppt课件_3D机器视觉在智能机器人拆垛中的应用
  13. python手写实现均值滤波_python手写均值滤波
  14. 什么是DIMM插槽?
  15. 红帽Linux如何设置root权限,LINUX下 一句话添加用户并设置ROOT权限
  16. Redis的RDB与AOF持久化机制
  17. A Game of Thrones(21)
  18. 数据模型|组成要素、概念模型、逻辑模型
  19. oracle运维与mysql_运维日记| MySQL/Oracle深度解析之一:逻辑读
  20. postgresql 流复制切换

热门文章

  1. python 反爬策略_如何应对网站反爬虫策略?如何高效地爬大量数据?
  2. c语言八数码A星算法代码解析,八数码问题c语言a星算法详细实验报告含代码解析...
  3. 5.3.6 原子操作对非原子的操作排序
  4. 学习java 第三天 数据类型以及存储大小取值范围 (one 大白 (●—●))
  5. linux创建云主机内存不足,云主机DC2 Linux系统CPU与内存占用率高导致无法登录
  6. Java面试知识(持续更新)
  7. 认识JWT(JSON WEB TOKEN)
  8. 火狐浏览器添加New Tab插件
  9. 浅谈C/C+内存管理、内存泄漏、堆栈
  10. Ubuntu16.04安装boost库