Python中args kwargs参数的一些使用方法
A_Snail Lv3

Python中参数传递的一些理解。 大佬勿喷

参数类型。

形参和实参

实参是实际参数,而形参是形式参数,例如

1
2
3
4
def func(a,b,c): # 这里的a,b,c 就是形式参数,
print(a,b,c)

func(12,3,45) # 这里的12,3,45 就是实参,也就是实际参数

参数的分类。

位置参数

1
2
3
4
def info(name,age,gender):
print(name,age,gender)

info('张三', 23,'man')

运行结果:

image

关键字参数 +默认值参数

  • 关键字参数:
1
2
3
4
def func(a,b,c):
print(a,b,c)

func(a=2,c=1,b=3)

结果:
image

关键字传参可以不用管参数的位置,但是需要给参数一定的值。

  • 默认值传参。
    在现实生活中,我们需要录入很多重复的信息的时候,可以给定一个默认值,比如一个班级的学生,60个男生,5个女生的话,可以默认设置为男性。
1
2
3
def info2(name,age,gender='woman'):
print(name,age,gender)
info2('刘亦菲', 19)

运行结果:
image

参数对比

image
结果对比:
image

info函数中gender是没有给定默认值的,所以传参的时候需要给定值

动态参数

位置参数

在运用过程中,我们可能需要传递的参数是不固定的,有时候参数多,有时候少,那么下面这个就可以解决这个问题。

  • *args
    * args 表示可以接受所有传递进来的位置参数,同时也还可以接受列表和字典类型的传参。
    例:
    image

这里我们可以看到,我们传入进去的参数,都被以元组类型打印出来了,但是我们直接传参列表和字典,列表和字典都被当做一个参数传递,打印出来的是元组里面的列表和元组里面的字典,而如果我们传递*list和*dict的话 那么传递列表的值就是单独的,而且打印的时候是一个元组。而字典也会被单独传递键名。

关键字参数

  • **kwargs参数传递

image

这里宇*不同的是,**kwargs的参数传递,只能关键字类型的和字典类型的传参,其他的会报错。

**kwargs 只有在有关键字参数的时候,才会有字典的值

混合参数的搭配使用

通过上面的了解,我们有时候需要给定一些固定的位置参数,但是又需要传递未知长度的参数,甚至最后可能还需要给关键字参数,那么我们可以将所学的几种参数搭配使用。

image

那么参数的使用顺序是
位置参数>*args>关键字参数>**kwargs
这里解释以下为什么是这个顺序。
这里的c 默认情况下是为你好的,但是我们打印的时候 c变为3了,我们想要的默认值就没法生效了,所以我们想要达到想要的结果,就只能修改传递位置参数的顺序,如图,如果上面第一个传参是*args参数的话,那么我们输入的前面10个参数,全部都会被它所接收,而**kwargs 只有在有关键字参数的时候,才会有字典的值 那么它为空,此时a和b两个参数,就已经没有参数了,这里显然是行不通的。
但是打印的时候,关键字传参可以先打印。

image

接受任意类型的参数。

这个是一个比较特殊的

image

如图所示,结果也进行了备注。