python 中*args 和 **kwargs
简单的可以理解为python 中给函数传递的可变参数,args 是 列表的形式。kwargs 是 key,value的形式,也就是python 中的字典。
*args 必须出现在**kwargs 的前边,否则会抛异常。
def test(*args, **kwargs):
print args
print kwargs
if __name__ == '__main__':
print '---test 1---'
test(1, 2, 3)
print '---test 2---'
test(a=1, b=2, c=3)
print '---test 3---'
data_list = [1, 2, 3]
data_dict = {"a":1, "b":2, "c":3}
test(*data_list, **data_dict)
输出为:
---test 1---
(1, 2, 3)
{}
---test 2---
()
{'a': 1, 'c': 3, 'b': 2}
---test 3---
(1, 2, 3)
{'a': 1, 'c': 3, 'b': 2}
如果将**kwargs 写到了 *args 的前边的时候,程序会报错。
def test2(**kwargs, *args):
pass
将会报出
def test2(**kwargs, *args):
^
SyntaxError: invalid syntax
的异常来
也可以将函数写成前边有固定想接受的参数,然后后边跟上可变参数,python默认会去自动做匹配。例如:
def test3(a, b, *args, **kwargs):
print 'a=', a
print 'b=', b
print 'args=', args
print 'kwargs', kwargs
测试代码及输出:
print '---test3-1---'
test3(a=1,b=2, c=3, d=4)
print '---test3-2---'
test3(1, 2, 3, c=4, d=5) ---test3-1---
a= 1
b= 2
args= ()
kwargs {'c': 3, 'd': 4}
---test3-2---
a= 1
b= 2
args= (3,)
kwargs {'c': 4, 'd': 5}
python 中*args 和 **kwargs的更多相关文章
- python 中 *args 和 **kwargs 的区别
在 python 中,*args 和 **kwargs 都代表 1个 或 多个 参数的意思.*args 传入tuple 类型的无名参数,而 **kwargs 传入的参数是 dict 类型.下文举例说明 ...
- Python中 *args 和 **kwargs 的区别
先来看个例子: def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ', kwargs print '----------- ...
- python中*args和**kwargs学习
*args 和 **kwargs 经常看到,但是一脸懵逼 ,今天终于有收获了 """ python 函数的入参经常能看到这样一种情况 *args 或者是 **kwargs ...
- Python中 *args 和 **kwargs 的含义?
答:在python中,*args和**kwargs通常使用在函数定义里.*args 和 **kwargs 都允许你给函数传不定数量的参数,即使在定义函数的时候不知道调用者会传递几个参数.ps: *ar ...
- python 中 *args he **kwargs的区别
''' 一 *args 和 **kwargs 的区别? *args 表示任意个 无名参数, 类型是元祖 tuple. **kwargs 表示的是关键字的参数 传入的参数是 dict 类型. 当*和** ...
- Python中*args 和**kwargs的用法
当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值.还是直接来代码吧,废话少说[python] def fun_var_args(far ...
- Python中*args和**kwargs 的简单使用
# 在函数定义中使用*args和kwargs传递可变长参数. *args用作传递非命名键值可变长参数列表(位置参数); kwargs用作传递键值可变长参数列表# *args表示任何多个无名参数,它是一 ...
- Python中*args和**kwargs的区别
(注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正.) 中秋的夜,微凉,但却始终看不见月亮. 我想,它一定是害羞了,悄悄的躲到了乌云的后面. 嗯,就是这样,我真是太TM机智了. 正 ...
- 【Python】Python中*args 和**kwargs的用法
好久没有学习Python了,应为工作的需要,再次拾起python,唤起记忆. 当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值. 还是 ...
随机推荐
- ubuntu14.04 wifi驱动
ubuntu崩溃后再安装后,发现没有了wifi按钮 因为必须要用wifi不然太不方便了,于是在网上找了一下,安装了一下驱动就解决了 首先确定无线网卡类型: $ lspci -vnn -d 14e4: ...
- java.io.FileNotFoundException: ...\ibs\library-1.0.17.jar (系统找不到指定的文件。)
网上找一下相应的jar包,放到对应的路径下就好了
- Android按钮的各个样式设置
安卓开发学习之014 Button应用详解(样式.背景.按钮单击.长按.双击.多击事件) 一.Button简介 按钮也是继承自TextView 二.XML定义方法 <Button android ...
- AAS代码第2章
[root@node1 aas]# pwd /root/aas [root@node1 aas]# wget http://archive.apache.org/dist/spark/spark-1. ...
- 如何在ashx页面获取Session值
[转] 在一般事务处理页面,可以轻松的得到 Request,Response对象,从而进行相应的操作,如下: HttpRequest Request = context.Request; Http ...
- ng-Enter指令
app.directive('ngEnter', function() { return function(scope, element, attrs) { element.bind("ke ...
- 使用Myeclipse插件将wsdl生成java客户端代码
使用环境:MyEclipse9.0 本教程使用Myeclipse内置插件生成java代码,网上说这是xfire插件,不管怎样,生成和调用客户端代码都十分简单. 1.在项目上右键,选择New->O ...
- 解决PyScripter中文乱码问题
环境: PyScripter 2.6.0.0 python3.4 问题: PyScripter有个小坑,打开文件后中文都成了乱码.在PyScripter中新建的文件中文可以正常显示,但是重新打开后中文 ...
- commonjs AMD,CMD
CommonJS CommonJs 是服务器端模块的规范,Node.js采用了这个规范. 根据CommonJS规范,一个单独的文件就是一个模块.加载模块使用require方法,该方法读取一个文件并执行 ...
- 解决protobuf不能直接在IOS上使用,利用protobuf-net在IOS上通讯
---------------------------------------------------------------------------------------------------- ...