初学Python的同学们看到代码中类似func(*args, **kwargs)这样的函数数定义时,经常感到一头雾水。

下面通过一个简单的例子来详细解释下Python函数可变数*args及**kwargs,先给出标准答案:

1. *args是arguments单词缩写,表示任意多个无名数,是一个tuple,如 (1,2,3,'a','b','c')

2. **kwargs是keyword arguments单词缩写,表示关键字数,是一个dict,如{'a':1,'b':2,'c':3}

示例代码:

# coding:utf-8
def foo(*args,**kwargs):
print 'args=',args
print 'kwargs=',kwargs
print '*'*20
if __name__=='__main__':
#只传参数*args=(1,2,3)
foo(1,2,3)
#只传参数**kwargs=dict(a=1,b=2,c=3)
foo(a=1,b=2,c=3)
#传入参数*args=(1,2,3)
#传入参数**kwargs=dict(a=1,b=2,c=3)
foo(1,2,3,a=1,b=2,c=3)
#传入参数*args=(1,'b','c')
#传入参数**kwargs=dict(a=1,b='b',c='c')
foo(1,'b','c',a=1,b='b',c='c')

运行结果:

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

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

python函数可变数*args和**kwargs区别

#*args(元组列表)和**kwargs(字典)的区别 def tuple_test(*args): for i in args: print 'hello'+i s=('xuexi','mili' ...

python编程系列---args与kwargs详解

args与kwargs详解 """ Process([group [, target [, name [, args [, kwargs]]]]]) - target:目 ...

理解 Python 中的可变数 *args 和 **kwargs:

默认数:  Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如: def getSum(x,y=5): print "x:", x print "y:& ...

[Python学习笔记-004] 可变参数*args和**kwargs

在Python中,可变数的传递使用*args和**kwargs来实现,其中: *args表示任意个位置参数(positional argument),被表示为一个只读的数组(tuple): **kw ...

Python函数装饰器原理与用法详解

本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...

[]Python 命令行数和getopt模块详解

有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行数,根据不同参数进行不同的处理,在Pyt ...

Python 命令行数和getopt模块详解

有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行数,根据不同参数进行不同的处理,在Python里,命令行的参数和C语言很类似(因为标准Python是用C语言实现的).在C语言里,m ...

python可变参数*args, **kwargspython可变参数*args, **kwargs def foo(* args, ** kwargs): print ' args = ',  args print ' kwargs = ',  k ...Python函数参数*args和**kwargs

1. Python中使用*args和**kwargs #!/usr/bin/env python3 # coding: utf-8 # File: args_kwargs_demo.py # Auth ...