python 错题本
1.可边长参数
def func(*ags, **kw):
pass
* 在函数的形参中,可以接受多余的位置参数,并利用一个元组来记录。例如func(1,2,3,4,5, name='lll', age=12) ags就是 (1,2,3,4,5)
**在函数的形参中,可以接受多于的关键字参数,并利用一个字典来记录,例如func(1,2,3,4,5, name='lll', age=12), kw就是 {"name":'lll', 'age':12}
*在函数的实参中,可以将一个可迭代类型,转化成一个元组来记录,例如func(*"helloworld"), ags就是(‘h’, 'e','l','l', 'o', 'w', 'o', 'r', 'l', 'd'), 如果是字典的话,ags就是key值的集合。
def func(a, b, c, d, name, age, *ags, **kw):
print(a)
print(b)
print(name)
print(age)
print(ags, kw)
func(1,3,'fe', 'f3efe', 6, 8, 10, psw=20, *[1,2,3], **{"height":1.81}) #这种不会报错
前边的a、b、c、d、nage、age这种是位置参数,关键字参数赋值之前,关键字参数之前的位置参数都必须赋值完成。
例如name是第五个参数,如果通过name='张三'这种方式赋值的时候,如果name这个参数前 <4个的位置参数,例如只给了三个, 那缺的位置参数会从*ags中去取,剩下的就是ags参数的元组值。
例如 func(1,3,'fe', psw=20, *[11,12,13], **{"height":1.81}) #d=11, name=12, age=13,ags=(), kw={"name":'lll', 'age':12}
如果name这个参数前 >4个的位置参数,例如给了5个,就会报错,程序会给name赋两个值,导致程序直接报错。
如果给了关键字参数,后边再无法跟位置参数了,例如 func(psw=20, 1,3,'fe', *[11,12,13], **{"height":1.81}) ,这样会直接报错。因为程序无法识别后边的位置参数。
func(1,3,'fe', psw=20, *[11,12,13], **{"height":1.81}) #name=12, age=13
浙公网安备 33010602011771号