版权声明:转载请注明作者(独孤尚良dugushangliang)出处:https://blog.csdn.net/dugushangliang/article/details/101350477
def fun(a,b):
#do what you want
pass
#全是位置形参
fun('happy',70)
#全是关键字形参
fun(a='happy',b=70)
#位置形参加关键字形参,其中全部位置形参要在全部关键字形参之前
fun('happy',b=70)
#上述操作,都由调用函数的人任取方式。下面是如何限定某参数必须用某形式。
#参照https://docs.python.org/zh-cn/3.8/whatsnew/3.8.html
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
#形参a和b为仅限位置形参,c或d可以是位置形参或关键字形参,而e或f要求为关键字形参
f(10, 20, 30, d=40, e=50, f=60)
对于形参的两种形式(位置、关键字)的限定,对于python的版本有要求。其中对于位置的限定,是python 3.8的新特性,在python3.8之前是可以限定关键字的。
本文的关键是:/作为参数列表中的一位,表示其前的参数都是位置形参,都要使用位置传参。*作为参数列表中的一位,表示其后的参数都是关键字形参,都要使用关键字传参。这决定了/必在*之前。这两者中间的参数可以任选方式,既可以使用位置也可以使用关键字,但这个需要在一个原则下:任一位置传参之前的参数都必须是位置传参不可以是关键字传,即任一关键字传参之后不可有位置传参。/是python 3.8及以后可用,*则在python 3.8版本之前可用,至于哪个版本起可用,留待后考。
独孤尚良dugushangliang——著