Python学习教程:Python函式引数匹配模型通用规则keyword-only引数
概述
Python3对函式引数的排序规则更加通用化了,即Python3 keyword-only引数,该引数即为必须只按照关键字传递而不会有一个位置引数来填充的引数。该规则在处理人一多个引数是很有用的。
keyword-only
kword_only(1, 2, 3, c=4)
print(\-\ * 20)
kword_only(a=1, c=3)
示例结果:
1 (2, 3) 4
1 3
在*args之后的引数都需要在呼叫中使用关键字的方式传递,否则会丢掷异常。
def kword_only(a, *b, c):
print(a, b, c)
kword_only(1, 2, 3)
异常结果:
kword_only(1, 2, 3)
TypeError: kword_only missing 1 required keyword-only argument: \c\
我们也可以在引数列表中使用一个*字元,表示函式不会接受变数长度的引数列表,而是要求*后面的引数都需要使用关键字引数的方式传递。
def kword_only(a, *, b, c):
print(a, b, c)
kword_only(1, b=2, c=3)
print(\-\*20)
kword_only(b=2, c=3, a=1)
示例结果:
1 2 3
1 2 3
我们可以看到a可以利用位置引数进行传递,但是b、c必须通过关键字引数传递,否则就会丢掷异常。
def kword_only(a, *, b, c):
print(a, b, c)
kword_only(1, 2, 3)
异常结果:
kword_only(1, 2, 3)
TypeError: kword_only takes 1 positional argument but 3 were given
当然我们,可以通过对keyword-only引数使用预设值,这样例中的a仍可以通过位置引数或者关键字引数传递,而b、c就是可选的了,当然如果需要传递的话仍然是要利用关键字引数进行传递的。
def kword_only(a, *, b=2, c=3):
print(a, b, c)
kword_only(1)
print(\-\*20)
kword_only(a=1)
print(\-\*20)
kword_only(b=22, c=33, a=11)
示例结果:
1 2 3
1 2 3
11 22 33
更多的Python学习教程晚些会继续为大家更新,或者你们有什么想学想看的Python学习教程也可以留言哦!