如果我们不确定要往函数中传入多少个参数,或者我们想往函数中以列表和元组的形式传参数时,那就使要用*args
;
如果我们不知道要往函数中传入多少个关键词参数,或者想传入字典的值作为关键词参数时,那就要使用**kwargs
。
args
和kwargs
这两个标识符是约定俗成的用法,你当然还可以用*bob
和**billy
,但是这样就并不太妥。
下面是具体的示例:
def f(*args,**kwargs): print args, kwargs
l = [1,2,3]t = (4,5,6)d = {‘a‘:7,‘b‘:8,‘c‘:9}
f()f(1,2,3) # (1, 2, 3) {}f(1,2,3,"groovy") # (1, 2, 3, ‘groovy‘) {}f(a=1,b=2,c=3) # () {‘a‘: 1, ‘c‘: 3, ‘b‘: 2}f(a=1,b=2,c=3,zzz="hi") # () {‘a‘: 1, ‘c‘: 3, ‘b‘: 2, ‘zzz‘: ‘hi‘}f(1,2,3,a=1,b=2,c=3) # (1, 2, 3) {‘a‘: 1, ‘c‘: 3, ‘b‘: 2}
f(*l,**d) # (1, 2, 3) {‘a‘: 7, ‘c‘: 9, ‘b‘: 8}f(*t,**d) # (4, 5, 6) {‘a‘: 7, ‘c‘: 9, ‘b‘: 8}f(1,2,*t) # (1, 2, 4, 5, 6) {}f(q="winning",**d) # () {‘a‘: 7, ‘q‘: ‘winning‘, ‘c‘: 9, ‘b‘: 8}f(1,2,*t,q="winning",**d) # (1, 2, 4, 5, 6) {‘a‘: 7, ‘q‘: ‘winning‘, ‘c‘: 9, ‘b‘: 8}
def f2(arg1,arg2,*args,**kwargs): print arg1,arg2, args, kwargs
f2(1,2,3) # 1 2 (3,) {}f2(1,2,3,"groovy") # 1 2 (3, ‘groovy‘) {}f2(arg1=1,arg2=2,c=3) # 1 2 () {‘c‘: 3}f2(arg1=1,arg2=2,c=3,zzz="hi") # 1 2 () {‘c‘: 3, ‘zzz‘: ‘hi‘}f2(1,2,3,a=1,b=2,c=3) # 1 2 (3,) {‘a‘: 1, ‘c‘: 3, ‘b‘: 2}
f2(*l,**d) # 1 2 (3,) {‘a‘: 7, ‘c‘: 9, ‘b‘: 8}f2(*t,**d) # 4 5 (6,) {‘a‘: 7, ‘c‘: 9, ‘b‘: 8}f2(1,2,*t) # 1 2 (4, 5, 6) {}f2(1,1,q="winning",**d) # 1 1 () {‘a‘: 7, ‘q‘: ‘winning‘, ‘c‘: 9, ‘b‘: 8}f2(1,2,*t,q="winning",**d) # 1 2 (4, 5, 6) {‘a‘: 7, ‘q‘: ‘winning‘, ‘c‘: 9, ‘b‘: 8}
为什么提这个问题?
有时候,我们需要往函数中传入未知个数的参数或关键词参数。有时候,我们也希望把参数或关键词参数储存起来,以备以后使用。有时候,仅仅是为了节省时间。
本文首发于Python黑洞网,博客园同步跟新
原文地址:https://www.cnblogs.com/pythonzhichan/p/11456744.html
时间: 2024-10-09 17:15:03