python学习笔记8-函数的多类型传值和冗余参数
函数多类型传值
例一,元组传参(灵活多变)
In [2]: def fun(x,y): ...: return x+y In [4]: print fun(3,5) 8 In [5]: t=(1,2) In [6]: print fun(*t) #注意,这里使用的是*t调用元组t 3 In [7]: print fun(t) #用t,不加*,报错只给了一个参数,需要给2个参数 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-7-e28f492cc4ca> in <module>() ----> 1 print fun(t) TypeError: fun() takes exactly 2 arguments (1 given) In [10]: def fun(x,y,z): ....: return x+y+z ....: In [11]: t1=(2,3,4) In [12]: fun(*t1) #把元组t1的值,2,3,4分别赋值给x,y,z Out[12]: 9 In [13]: fun(*(1,2,3)) #把1,2,3赋值给x,y,z Out[13]: 6 In [14]: fun(1,*t) #t=(1,2) 把1,1,2分别赋值给x,y,z Out[14]: 4 In [15]: fun(*t,1) File "<ipython-input-15-aee1a8f57f2b>", line 1 fun(*t,1) SyntaxError: only named arguments may follow *expression 只有命名参数后面可以跟*expression表达式,1是命名参数,(1,*t)正确,(*t,1)错误 也可以这样调用参数 In [16]: fun(x=1,y=3,z=5) Out[16]: 9
例二、字典传值(灵活多变)
注:字典的key和形参是一样的才行,都是x,y,z,否则报错 In [10]: def fun(x,y,z): ....: return x+y+z n [20]: dic ={'x':1,'y':3,'z':5} In [21]: fun(**dic) #**dic这种传值方法ok Out[21]: 9 In [88]: dic1={'y':9,'z':90} #注意:这里必须是x,y,z,需要和fun()对应,不能是a,b,c In [89]: fun(1,**dic1) # 1,**dic1 这种传值方法也ok 100 In [92]: fun(**{'x':5,'y':6,'z':90}) # **{'x':5,'y':6,'z':90}这种传值方法也ok 101
函数的冗余参数
向函数传元组和字典
处理多余实参,传到字典中
def fun(x,y,*args,**kwargs)
In [98]: def fun(x,y,*args,**kwargs): ...: print x ...: print y ...: print args ...: print kwargs ...: ...: In [99]: t=(1,2) In [100]: dic1={'a':4,'c':9,'b':80} In [117]: fun(1,2,3,4,[1,2],*t,f=2,**dic1) 1 #对应命名参数x 2 #对应命名参数y (3, 4, [1, 2], 1, 2) #多余参数3,4都存到元祖里面和*t即t=(1,2)作为冗余参数存在元祖里面 {'a': 4, 'c': 9, 'b': 80, 'f': 2} #f=2,**dic1,以等号和字典的key和value的形式冗余参数会保存到字典里