实参是实际参数,而形参是形式参数,例如
def func(a,b,c): # 这里的a,b,c 就是形式参数,
print(a,b,c)
func(12,3,45) # 这里的12,3,45 就是实参,也就是实际参数
def info(name,age,gender):
print(name,age,gender)
info('张三', 23,'man')
运行结果:
def func(a,b,c):
print(a,b,c)
func(a=2,c=1,b=3)
结果:
关键字传参可以不用管参数的位置,但是需要给参数一定的值。
def info2(name,age,gender='woman'):
print(name,age,gender)
info2('刘亦菲', 19)
运行结果:
结果对比:
info函数中gender是没有给定默认值的,所以传参的时候需要给定值
在运用过程中,我们可能需要传递的参数是不固定的,有时候参数多,有时候少,那么下面这个就可以解决这个问题。
这里我们可以看到,我们传入进去的参数,都被以元组类型打印出来了,但是我们直接传参列表和字典,列表和字典都被当做一个参数传递,打印出来的是元组里面的列表和元组里面的字典,而如果我们传递*list和*dict的话 那么传递列表的值就是单独的,而且打印的时候是一个元组。而字典也会被单独传递键名。
这里宇*不同的是,**kwargs的参数传递,只能关键字类型的和字典类型的传参,其他的会报错。
**kwargs 只有在有关键字参数的时候,才会有字典的值
通过上面的了解,我们有时候需要给定一些固定的位置参数,但是又需要传递未知长度的参数,甚至最后可能还需要给关键字参数,那么我们可以将所学的几种参数搭配使用。
那么参数的使用顺序是 位置参数>args>关键字参数>**kwargs 这里解释以下为什么是这个顺序。 这里的c 默认情况下是为你好的,但是我们打印的时候 c变为3了,我们想要的默认值就没法生效了,所以我们想要达到想要的结果,就只能修改传递位置参数的顺序,如图,如果上面第一个传参是*args参数的话,那么我们输入的前面10个参数,全部都会被它所接收,而*kwargs 只有在有关键字参数的时候,才会有字典的值 那么它为空,此时a和b两个参数,就已经没有参数了,这里显然是行不通的。 但是打印的时候,关键字传参可以先打印。
这个是一个比较特殊的
如图所示,结果也进行了备注。