Python 的函数在声明参数时大概有下面 四 种形式:
- 不带默认值的:def func(a): pass ;a就是不带默认值的参数,也叫位置参数;
- 带有默认值的:def func(a, b=1): pass ;b是带默认值的参数 ,也叫关键参数;
- 任意位置参数:def func(a, b=1, *c): pass ;c是任意位置参数
- 任意键值参数:def func(a, b=1, *c, **d): pass;d是任意键值对参数,一般传入字典包
在调用函数时,有两种情况:
- 没有关键词的参数:func(“G”, 20)
- 带有关键词的参数:func(a=“G”, b=20)(其中带有关键词调用可以不考虑顺序:func(b=20, a=“G”)
1、当不带默认值的参数和带默认值的参数混合在一起时,调用该函数时,可以不对带默认值的参数赋值,此时会将带默认值得数值传递下去;如果给参数重新赋值,那么定义的函数的默认值会被重写;
2、当给函数的参数赋值时,一定要遵循顺序:位置参数不能在关键词参数之后出现,初中英语知识此时就会出现上式中语法错误;如果都带上关键词后可以不用考虑该顺序。
因此最保险的做法是全部使用关键参数。
任意参数
任意参数可以接受任意数量的参数,其中*a的形式代表任意数量的位置参数,**d代表任意数量的关键词参数:
在 Python 3.0 中,这里的关键词函数必须明确指明,不能通过位置推断。
**d则代表任意数量的关键词参数
Unpacking
*a、**d可以在函数参数之外使用:
所谓的解包(Unpacking)实际上可以看做是去掉()的元组、列表或者是去掉{}的字典。这一语法也提供了一个更加 Pythonic 地合并字典的方法: