函数的参数
一、默认参数:默认参数是指带有默认值的参数,在对该函数进行调用时,可以不必显示传递给该函数。当不传递值的时候,函数将使用默认值。默认参数后面必须也是默认参数。
注意:默认值只能会执行一次这条规则,在默认值为可变对象(列表,字典等)时非常重要。官方建议默认参数尽量使用不可变对象,因为可变对象会存储在后续调用中传递给它的参数。如:
def abc(a,b=[]): b.append(a) print(b)
连续调用三次的结果是:
abc(100) 结果:[100]
abc(200) 结果:[100,200]
abc(300) 结果:[100,200,300]
可以改以下方式:
def abc(a,b=None): if b is None: b = [] b.append(a) print(b)
连续调用三次的结果是:
abc(100) 结果:[100]
abc(200) 结果:[200]
abc(300) 结果:[300]、
二、关键字参数:函数调用时指定参数名称,称关键字参数。调用时关键字函数必须在普通参数后面。如:
def abc(x,a=100,b=200)
调用时:
abc(10,a=300,b=400)
注意:两者的区别是:默认参数是在函数创建时,关键字函数是在函数调用时。
三、限定关键字形参(命名关键字参数):必须使用关键字方式传递参数,目的就是为了限制后面几个参数只能按关键字传递,这往往是因为后面几个形参名具有十分明显的含义,显式写出有利于可读性;或者后面几个形参随着版本更迭很可能发生变化,强制关键字形式有利于保证跨版本兼容性。
def abc(a,*,b,c): print(a,b,c)
这里的*号是占位符,表示*号后面的参数必须是关键字参数,调用如下:
abc(100,b=200,c=300)
四、可变参数:当参数的数量不固定或比较灵活时可以用可变参数。以*+参数名的形式,一般都用*args,会返回一个tuple对象;以**+参数的形式,一般都用**kwargs,会返回一个dict对象:
def abc(a,b,*args): print(a,b,args) abc(100,200,300,400,500,600)
返回结果:
100 200 (300, 400, 500, 600)
def abc(a,b,**kwargs): print(a,b,kwargs) abc(100,200,x=100,y=200,z=300)
返回结果:
100 200 {'x': 100, 'y': 200, 'z': 300}
五、参数的解包:如果参数的数据类型是:字符串,列表,元组,字典,集合的时候,可以解包传递实参时,可以在实参前添加*号,这样会自将序列中的元素依次作为参数传递。需要注意的是,实参解包后对应的元素数量必须和形参数量一致,不然程序会报错。
1、字符串、列表、元组、集合解包:
def abc(a,b,c):
print(a,b,c)
s = '123'
l = [1,2,3]
t = (1,2,3)
s1 = {1,2,3}
abc(*s)
abc(*l)
abc(*t)
abc(*s1)
返回结果都是:
1 2 3
2、字典解包:
def abc(a,b,c):
print(a,b,c)
d = {
'名字':'Donfag',
'年龄':20,
'工作':'Python'
}
abc(*d)
返回结果:
名字 年龄 工作
注意:这里获取到的值是字典的KEY,如果要获取字典的VALUE,可以用两个星号(**),但这里需要注意的是,用两个*号时,字典的键名和函数的形参名必须要一致(顺序和命名):
def abc(a,b,c):
print(a,b,c)
d = {
'a':'Donfag',
'b':20,
'c':'Python'
}
abc(**d)
返回结果:
a b c
浙公网安备 33010602011771号