python *args 和**kwargs的用法

来源:互联网 发布:亮剑 都梁 知乎 编辑:程序博客网 时间:2024/06/15 12:29

当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值。

关于args:

#!-*-coding:utf-8-*-#__author__ = 'ecaoyng'def func_args(farg, *args):    print("The first arg is %s" % farg)    print(type(args))    for arg in args:        print('Other arg is %s' % arg)func_args('hello','dear', 'python')输出:The first arg is hello<class 'tuple'>Other arg is dearOther arg is python

当然,也可以将

parameters = ['hello','dear', 'python']func_args(*parameters)结果也是一样的

kwargs的用法

#!-*-coding:utf-8-*-#__author__ = 'ecaoyng'def fun_var_kwargs(farg, **kwargs):    print ("arg:", farg)    for key in kwargs:        print("another keyword arg: %s: %s" % (key, kwargs[key]))# fun_var_kwargs(farg=1, myarg2="two", myarg3=3)kargs={'a': 1, 'b': 2, 'c': 3, 'd' : 4}fun_var_kwargs(kargs)print('='*40)fun_var_kwargs('First',**kargs)

输出结果:

arg: {'a': 1, 'd': 4, 'b': 2, 'c': 3}========================================arg: Firstanother keyword arg: a: 1another keyword arg: d: 4another keyword arg: b: 2another keyword arg: c: 3

现在更进一步讨论Python的星号(、*)的作用
当函数的参数前面有一个星号的时候表示这是一个可变的位置参数,两个星号*表示是可变的关键字参数。

def foo(*args, **kwarg):    for item in args:        print('In args:')        print(item)    for k,v in kwarg.items():        print('In kwarg')        print (k,v)    print(30*'=')foo(1, 2, 3, a=4, b=5)# outputs:# 1 in args.# 2 in args.# 3 in args.# (a,4) in kwarg.# (b,5) in kwarg.foo(2, 3, a=4, b=5, c=1)# outputs:# 2 in args.# 3 in args.# (a,4) in kwarg.# (b,5) in kwarg.# (c,1) in kwarg.#如上,我们可以传入任意多个参数v = (1, 2, 4)v2 = [11, 15, 23]d = {'a': 1, 'b': 12}foo(v, d)# In args:# (1, 2, 4)# In args:# {'a': 1, 'b': 12}foo(*v, **d)# In args:# 1# In args:# 2# In args:# 4# In kwarg# b 12# In kwarg# a 1foo(v2, d)# In args:# [11, 15, 23]# In args:# {'b': 12, 'a': 1}foo(*v2, **d)# In args:# 11# In args:# 15# In args:# 23# In kwarg# a 1# In kwarg# b 12

注意
上面的示例中如果v、v2、d没有加星号那么就当成了一个参数传递给了函数,如果加了星号那么就会解包后传递给函数。
可变位置参数*args是一个元组,是不可修改的。
对于字典类型的如果只使用一个型号*那么传入的只是字典的键。

原创粉丝点击