有时可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,声明时不会命名。
一个星号*的变量args会存放所有未命名的变量参数,args为元组;
两个星号**的变量kwargs会存放命名参数,即形如key=value的参数, kwargs为字典。
例如:
def add(a,b,*args,**kwargs):
print("a =",a)
print("b =",b)
# *args 代表传入的为元组类型
print("args =",args)
# **kwargs 代表传入的为字典类型
print("kwargs =",kwargs)
for key,value in kwargs.items():
print(key," = ",value)
add(1,2,3,4,5,6,m=7,n=8,p=9)
输出信息:
a = 1
b = 2
args = (3, 4, 5, 6)
kwargs = {‘m’: 7, ‘n’: 8, ‘p’: 9}
m = 7
n = 8
p = 9
注意另一种传入参数的写法:
def add(a,b,*args,**kwargs):
print("a =",a)
print("b =",b)
# *args 代表传入的为元组类型
print("args =",args)
# **kwargs 代表传入的为字典类型
print("kwargs =",kwargs)
for key,value in kwargs.items():
print(key," = ",value)
c = (3,4,5)
d = {"m":7,"n":8,"p":9}
add(1,2,*c,**d)
print("#"*30)
add(1,2,c,d)
输出如下,注意对比不同:
a = 1
b = 2
args = (3, 4, 5)
kwargs = {‘m’: 7, ‘n’: 8, ‘p’: 9}
m = 7
n = 8
p = 9
##############################
a = 1
b = 2
args = ((3, 4, 5), {‘m’: 7, ‘n’: 8, ‘p’: 9})
kwargs = {}
所以:当传入的是元组或者字典时,必须在前面加上星号(*)!!!!