失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python函数参数那些事 关键字参数与位置参数

python函数参数那些事 关键字参数与位置参数

时间:2020-02-22 14:48:13

相关推荐

python函数参数那些事 关键字参数与位置参数

在调用函数时传给 function(或 method)的值。参数分为两种:

关键字参数:在函数调用中前面带有标识符(例如name=)或者作为包含在前面带有**的字典里的值传入。举例来说,35在以下对 complex()的调用中均属于关键字参数:

complex(real=3, imag=5)complex(**{'real': 3, 'imag': 5})

位置参数:不属于关键字参数的参数。位置参数可出现于参数列表的开头以及/或者作为前面带有*的 iterable里的元素被传入。举例来说,3和 5在以下调用中均属于位置参数:

complex(3, 5)complex(*(3, 5))

规则:在函数调用中,关键字参数必须跟随在位置参数的后面。传递的所有关键字参数必须与函数接受的其中一个参数匹配,它们的顺序并不重要。这也包括非可选参数。不能对同一个参数多次赋值

以下是一些正确错误范例:

#函数定义def test(arg1, arg2='hello', arg3='world', arg4='nice to meet you'):print(arg2, arg3, arg4)#正确范例test(1000)# 1个位置参数test(arg1=1000)# 1个关键字参数test(arg1=1000, arg2='VOOOOOM') # 2个关键字参数test(arg2='VOOOOOM', arg1=1000) # 2个关键字参数test('a million', 'bereft of life', 'jump') # 3个位置参数test('a thousand', arg2='pushing up the daisies') # 1个位置参数,1个关键字参数#错误范例test() # 缺少一个参数test(voltage=5.0, 'dead') # 非关键字参数在关键字参数后面test(110, voltage=220)# 一个参数传了多个值test(arg5='John Cleese') # 对不存在的参数传值

为了确保可读性和运行效率,我们可以对每个参数,使用限制允许的参数传递形式,这样开发者只需查看函数定义即可确定参数项是仅按位置、按位置也按关键字,还是仅按关键字传递。

方法就是用/和*作为分隔符,把三种传递方法的参数分隔开来。

def function(arg1, arg2, /, arg3, arg4, *, arg5, arg6):pass

如上的函数,arg1和arg2是仅限位置参数,arg3和arg4是位置或关键字参数都行,arg5和arg6则是仅限关键字参数。

最后则是官方对于函数参数给出的指导:

如果你希望形参名称对用户来说不可用,则使用仅限位置形参。 这适用于形参名称没有实际意义,以及当你希望强制规定调用时的参数顺序,或是需要同时收受一些位置形参和任意关键字形参等情况。

形参名称有实际意义,以及显式指定形参名称可使函数定义更易理解,或者当你想要防止用户过于依赖传入参数的位置时,则使用仅限关键字形参

对于 API 来说,使用仅限位置形参可以防止形参名称在未来被修改时造成破坏性的 API 变动。

如果觉得《python函数参数那些事 关键字参数与位置参数》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。