用过
python的同学经常程序会碰到带*,以及**的参数,常见的是*args和**kwargs容易被其迷惑,下面就说说这个神秘的*与**。
*:在参数前放一个星号,表明将所有的值放在同一个元祖中,该参数的返回值是一个元祖。
**:在参数前放两个星号,表明蒋所有的值放在同一个字典中,该参数返回的值是一个字典。
其实看完这两句解释,大家应该已经理解的差不多。举例说明比较直观。。。
def oneStar(*t):
print t,type(t)
oneStar(1,2,3)
>>(1,2,3) <type'tuple'>
def twoStar(**d)
print d,type(d)
twoStar(a=1,b=2,c=3)
>>{'a':1,'b':2,'c':3} <type'dict'>
注意:使用*与**时注意位置很重要,特别是混合型参数时,顺序如下:
必须的参数->可选的参数->过量的位置参数->过量的关键字参数
即def complexfun(a,b=None,*c,**d)
举例说明吧。。。
def mix(a,b=0,*c,**y):
return a,b,c,y
print mix(1,2,3,4,5,x=6,y=7,z=8)
>>(1,2,(3,4,5),{'y':7,'x':6,'z':8})
但def mix(a,b=0,*c,x,**y)会出现无法定义,而且*一定要在**之前。
**可以创建字典,如下:
def kw_dict(**kwargs):
return kwargs
print kw_dict(a=1,b=2,c=3)
>>{'a':1,'b':2,'c':3}
其实创建字典有更简单的方法dict(a=1,b=2,c=3)
def func(a,b,c):
print a,b,c
args=(1,3,4)
func(*args)>>>1,3,4
kwargs={'a':1,'b':2,'c':3}
func(**kwargs)>>>1,2,3
可能还有
知识点,能力有限,后续补上,欢迎大家指点。。。