*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。

def fun(*args, **kwargs):print 'args = ', argsprint 'kwargs = ', kwargsprint '###'
if __name__ == '__main__':foo(1,2,3,4)foo(a=1,b=2,c=3)foo(1,2,3,4, a=1,b=2,c=3)foo('a', 1, None, a=1, b='2', c=3)

输出结果如下:

args =  (1, 2, 3, 4)
kwargs =  {}
###
args =  ()
kwargs =  {'a': 1, 'c': 3, 'b': 2}
###
args =  (1, 2, 3, 4)
kwargs =  {'a': 1, 'c': 3, 'b': 2}
###
args =  ('a', 1, None)
kwargs =  {'a': 1, 'c': 3, 'b': '2'}
###

可以看到,这两个是python中的可变参数。

注意:同时使用args和**kwargs时,必须args参数列要在**kwargs前,像foo(a=1, b=‘2’, c=3, a’, 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”。

def fun2(param1, *args, **kwargs):print 'param1 = ', param1print 'args = ', argsprint 'kwargs = ', kwargsprint '###'
fun2(1, 2, 3, 4, a=1,b=2,c=3)

输出结果:

param1 =  1
args =  (2,3,4)
kwargs =  {'a': 1, 'c': 3, 'b': 2}
###

1赋值给了param1, 剩下的2,3,4给了*args, 其他的都赋值给了**kwargs

还有一个很漂亮的用法,就是创建字典:

def kw_dict(**kwargs):return kwargs
print kw_dict(a=1,b=2,c=3)

结果:

{'a':1, 'b':2, 'c':3}

其实python中就带有dict类,使用dict(a=1,b=2,c=3)即可创建一个字典了。

详解Python的*args和 **kwargs相关推荐

  1. python中可变参数*args传入函数时的存储方式为_python 中文读法详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  2. pythonnamedtuple定义类型_详解Python中namedtuple的使用

    namedtuple是Python中存储数据类型,比较常见的数据类型还有有list和tuple数据类型.相比于list,tuple中的元素不可修改,在映射中可以当键使用. namedtuple: na ...

  3. python中index函数_详解python中的index函数用法

    1.函数的创建 def fun(): #定义 print('hellow') #函数的执行代码 retrun 1 #返回值 fun() #执行函数 2.函数的参数 普通参数 :要按照顺序输入参数 de ...

  4. python函数中可变参数的传递方式是_详解Python函数可变参数定义及其参数传递方式...

    Python函数可变参数定义及其参数传递方式详解 python中 函数不定参数的定义形式如下 1. func(*args) 传入的参数为以元组形式存在args中,如: def func(*args): ...

  5. python装饰器由浅入深_详解Python装饰器由浅入深

    装饰器的功能在很多语言中都有,名字也不尽相同,其实它体现的是一种设计模式,强调的是开放封闭原则,更多的用于后期功能升级而不是编写新的代码.装饰器不光能装饰函数,也能装饰其他的对象,比如类,但通常,我们 ...

  6. python的装饰器迭代器与生成器_详解python中的生成器、迭代器、闭包、装饰器

    迭代是访问集合元素的一种方式.迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 1|1可迭代对象 以直接作用于 for ...

  7. 详解Python的装饰器

    详解Python的装饰器 Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye( ...

  8. python namedtuple用法_详解Python中namedtuple的使用

    namedtuple是Python中存储数据类型,比较常见的数据类型还有有list和tuple数据类型.相比于list,tuple中的元素不可修改,在映射中可以当键使用. namedtuple: na ...

  9. python中什么是可变参数_详解Python的三种可变参数

    详解Python的三种可变参数 可变参数 可变参数应该最简单,在C/C++和Java等语言中都有,就是用*号来表示,例如 def testArg(*arg) 你可以传入任意多个元素(包括0)到参数中, ...

最新文章

  1. 一文带你看懂Spring事务!
  2. 分享这篇耗子叔的-《请玉伯一起来聊一聊“所向无敌的土方法”》
  3. Python类的封装
  4. (7) ebj学习: jpa 一对一,一对多,多对多
  5. mysql编辑前200行_巧妙使用SQL Server编辑前200行功能
  6. 移动web开发(一)——移动web开发必备知识
  7. #3864. Hero meet devil dp套dp + 状压 + 状态机
  8. mongoose实现批量删除和多id查询的api/方法
  9. Slicer学习笔记(十七)编写一个python扩展模块
  10. Large-scale Video Classification with Convolutional Neural Networks
  11. 使用Google表格进行网页抓取
  12. 微信小程序收藏功能实现思路
  13. 教师的常用教学软件_数学教学软件不知道怎么选择?来看看这些软件
  14. 【心电信号】基于matlab小波阙值心电信号去噪【含Matlab源码 2188期】
  15. 联邦学习原始论文解读
  16. Linear equations
  17. 微信小程序scroll-view 实现锚点定位,滑动标题变化,点击标题变化
  18. 编译阶段打印宏定义的内容
  19. 在讨论单元测试时,“DAMP not DRY”是什么意思?
  20. 相机校准和3D重建10-计算基本矩阵2

热门文章

  1. 指针06 - 零基础入门学习C语言46
  2. 谈谈DictionaryT1,T2和ListT的问题
  3. mysql没法修改数据_MySQL学习笔记之数据的增、删、改实现方法
  4. java构造函数调用其他程序的顺序_java初始化构造函数调用顺序
  5. 解决方案和项目的区别_沃尔玛用大数据提高销售额,云计算和大数据技术之间的区别汇总...
  6. Java黑皮书课后题第8章:*8.2(求矩阵对角线元素的和)使用下面的方法头编写一个方法,求n*n的double类型矩阵中主对角线上所有数字的和。编写一个程序,读取一个4*4的矩阵,显示主对角线和
  7. C语言学习之求一个3×3的整型矩阵对角线元素之和
  8. 《架构之美》阅读笔记一
  9. catch的执行与try的匹配
  10. django中实现websocket