一,参数收集
编程语言在定义函数时,如果需要传入的参数是不固定的,可能需要区分多种情况,定义多个函数名相同传参不同的函数,这样代码显得很冗余,python为解决这个问题,推出了参数收集,简化代码,形式如下:
- 定义函数时,在传参时加一个*号,函数可以收集0~N个值作为参数,返回结果是一个元组;
- 定义函数时,在传参时加一个**号,函数可以收集关键字参数,返回参数名为key值,参数值为values值的字典。
这样写简化代码,美观,参数可变时不要对参数做任何修改。
示例代码如下:
#收集任意个数参数
def print_args(*args):
print args
#收集关键字参数
def print_kw(**kw):
print kw
#收集任意参数,基本可以代表任意参数
def print_params(*args,**kw):
print args,kw
#参数组合
def print_all(a,b,c=0,*args,**kw):
print a,b,c,args,kw
print_args(1,2,34,4,45,5)#收集任意个数参数
print_args()#如果参数为空,返回的也是元元组
print_args('sss')#如果参数个数为1,也是元组形式
print_kw()#返回空字典
print_kw(qwe=99)
print_kw(ss=12,fa=424)
print_params()
print_params(132,24,'ss',42)
print_params(ss=234)
print_params(12,24,66,ss=432,hsg=546)
print_all(23, 543,134124,1342,4234,asdfg=24,kj=545)
结果如下所示:
这里需要注意的是参数组合参数定义的顺序必须是:位置参数、默认参数、可变参数、命名关键字参数和关键字参数。
(1, 2, 34, 4, 45, 5)
()
('sss',)
{}
{'qwe': 99}
{'ss': 12, 'fa': 424}
() {}
(132, 24, 'ss', 42) {}
() {'ss': 234}
(12, 24, 66) {'ss': 432, 'hsg': 546}
23 543 134124 (1342, 4234) {'kj': 545, 'asdfg': 24}
二、参数分配
def add(x,y):
return x+y
def fun(name,greeting):
print greeting,name
param=(1,2)
prarmtemp=(1,2,34,4)
print add(*param)
# print add(*prarmtemp) 这样会报错,只需要两个参数,给了四个
aram = {'name' :'jack','greeting':'well met'}
fun(**aram)
3
well met jack
三、zip函数
zip()函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
a=[1,2,'sss',45]
b=[121,24,54,43,5]
zipped=zip(a,b)
#返回元组的列表
print zip(a)
#返回的元素个数与最短的列表一致
print zip(a,b)
#参数分配机制,可以看出此处如何实现的
print zip(*zipped)
[(1,), (2,), ('sss',), (45,)]
[(1, 121), (2, 24), ('sss', 54), (45, 43)]
[(1, 2, 'sss', 45), (121, 24, 54, 43)]