莫愁前路无知己,天下谁人不识君。。。。

python经常疑惑的知识1----(*args)VS(**kwargs)

上一篇 / 下一篇  2017-05-09 20:02:35 / 个人分类:python知识精髓

用过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

可能还有知识点,能力有限,后续补上,欢迎大家指点。。。


TAG: Python python 知识

 

评分:0

我来说两句

Open Toolbar