*和**在做参数中的作用

我们知道*号可以借zip()函数,*zip(a,b),表示将a和b打包后的元组分解开来,注意,分解开后只能够重新打包起来,即zip(*zip(a,b)),而且分解不可逆,即令z=*zip(a,b),则z要重新打包才行。

1.*号在函数参数中出现,表示将传入的参数打包成一个列表(list),如:

def add(*data):
    sum = 0
    for i in data:
        sum = sum + i
    return sum

add(1,2,3,4)

结果输出为10

2.*号在传入参数列表中出现,表示将一个列表分解为多个参数,如:

y= lambda a,b,c,d:a+b+c+d
y(*[1,2,3,4])

最后输出结果也为10

  1. **号在函数参数中的作用和1类似,不过不是打包成一个列表,而是打包成一个字典(dictionary),例如:
def add(**data):
    print data
add(city='beijing',age=10)

输出{'city': 'beijing', 'age': 10}

  1. **号传入参数列表中的作用和2类似,不过是将一个字典分解为多个参数,如:
def x(age,sex):
    print("age is %d,sex is %s" % (age,sex))
x(**{'age':10,'sex':'M'})

输出age is 10,sex is M

你可能感兴趣的:(*和**在做参数中的作用)