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的形式冗余参数会保存到字典里
转载于:https://blog.51cto.com/daixuan/1790496