用实例说明python的*args和**kwargs用法


Posted in Python onNovember 01, 2013

先来看一个例子:

>>> def foo(*args, **kwargs):
    print 'args =', args
    print 'kwargs = ', kwargs
    print '-----------------------'
    
>>> 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表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个 dict。并且同时使用*args和**kwargs时,*args参数列必须要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”。如同所示:
Python 相关文章推荐
python备份文件以及mysql数据库的脚本代码
Jun 10 Python
Python 文件操作的详解及实例
Sep 18 Python
python根据txt文本批量创建文件夹
Dec 08 Python
python使用mitmproxy抓取浏览器请求的方法
Jul 02 Python
django-filter和普通查询的例子
Aug 12 Python
python sklearn常用分类算法模型的调用
Oct 16 Python
Pytorch之Variable的用法
Dec 31 Python
Windows下Anaconda和PyCharm的安装与使用详解
Apr 23 Python
Django之全局使用request.user.username的实例详解
May 14 Python
python turtle绘制多边形和跳跃和改变速度特效
Mar 16 Python
python多次执行绘制条形图
Apr 20 Python
Pytorch中expand()的使用(扩展某个维度)
Jul 15 Python
python操作MongoDB基础知识
Nov 01 #Python
python操作MySQL数据库具体方法
Oct 28 #Python
Python sys.path详细介绍
Oct 17 #Python
python开发的小球完全弹性碰撞游戏代码
Oct 15 #Python
python中 ? : 三元表达式的使用介绍
Oct 09 #Python
Python 文件和输入输出小结
Oct 09 #Python
Python 错误和异常小结
Oct 09 #Python
You might like
phpize的深入理解
2013/06/03 PHP
php中stream(流)的用法
2014/03/25 PHP
PHP中防止SQL注入方法详解
2014/12/25 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
PHP检测用户语言的方法
2015/06/15 PHP
Yii2框架dropDownList下拉菜单用法实例分析
2016/07/18 PHP
javascript使用appendChild追加节点实例
2015/01/12 Javascript
jQuery设置指定网页元素宽度和高度的方法
2015/03/25 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
全面解析Bootstrap图片轮播效果
2015/12/03 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
JS针对Array的各种操作汇总
2016/11/29 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
VUE重点问题总结
2018/03/19 Javascript
解决v-for中使用v-if或者v-bind:class失效的问题
2018/09/25 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
JavaScript实现的拼图算法分析
2019/02/13 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
jquery实现自定义树形表格的方法【自定义树形结构table】
2019/07/12 jQuery
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
实例解析Python的Twisted框架中Deferred对象的用法
2016/05/25 Python
python中强大的format函数实例详解
2018/12/05 Python
Django REST framework视图的用法
2019/01/16 Python
记录一下scrapy中settings的一些配置小结
2020/09/28 Python
Pandas替换及部分替换(replace)实现流程详解
2020/10/12 Python
联想德国官网:Lenovo Germany
2018/07/04 全球购物
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
征兵宣传标语
2014/06/20 职场文书
2015年公司新年寄语
2014/12/08 职场文书
五年级数学教学反思
2016/02/16 职场文书
职场新人知识:如何制定一份合理的工作计划?
2019/09/11 职场文书
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python
Linux安装Docker详细教程
2022/07/07 Servers