python-函数参数
位置参数
即遵循位置一一对应的原则
默认参数
python中的默认参数类似于 C++ 的默认参数,值得注意的是 python 默认参数的一个坑
def push_back(L=[]):
L.append('$')
return L
该函数的默认参数是一个空列表,然而当执行如下语句时:
>>> push_back()
['$']
>>> push_back()
['$','$']
因此,在使用默认参数的时候,默认参数要指向不可变对象
可以采用如下方式:
def push_back(L=None):
if L is None:
L = []
L.append('$')
return L
其中 None 常量不是 false,0,也不是空对象,表示没有值,可以参考文末第二篇参考文献
可变参数
可变参数的传入的参数个数是可变的(包括 0),定义函数时,在可变参数名前加一个 *
。
这里有个疑问,是关于可变参数中的 *
和打包操作中的 *
的区别。
def sum(*args):
s = 0
for n in args:
s = s + n
return s
L = [1, 2, 3, 4]
s = sum(*L)
可变参数在函数调用时,会被组装为一个 turple
关键字参数
可以传入 0 至任意多个带名字的参数,被组装成字典传入。定义函数时,在参数名前加 **
指定关键字参数。可以用 **
来将字典变量以关键字参数的形式传入,这里可以参考 python-打包和解包
如果需要对关键字参数指定名字(命名关键字参数),需要在名字前用 *
或者可变参数间隔
# 关键字参数
def person(**kw):
if 'city' in kw:
pass
if 'age' in kw:
pass
# 命名关键字参数
# 只接受 age 和 city 作为关键字的参数
def person1(name, *, age, city):
pass
def person2(name, *friends, age, city):
pass
当使用上述多种参数时,参数组合的顺序是必选参数、默认参数、可变参数、命名关键字参数、关键字参数
References
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ruoy's Blog!
评论