Python函数参数的传递及默认值的定义
在Python中,函数参数的传递方式有两种,分别为位置参数和关键字参数。在定义函数时,可以设置函数参数的默认值,也可以使用可变长度参数来传递参数。
一、位置参数
位置参数是指按照参数所在位置进行传递的参数。在函数调用时,参数依次按照函数定义中的顺序进行传递。例如:
def func(a, b, c):
print(a, b, c)
func(1, 2, 3) # 输出:1 2 3
在上述代码中,调用函数func()时使用了位置参数,它们的顺序与函数定义时的顺序一致,分别为1、2、3。
二、关键字参数
关键字参数是指通过指定参数名来传递的参数。在函数调用时,可以使用参数名=值的方式来指定参数的值。例如:
def func(a, b, c):
print(a, b, c)
func(b=2, a=1, c=3) # 输出:1 2 3
在上述代码中,调用函数func()时使用了关键字参数,可以看到参数的顺序与函数定义时不一致,但是由于使用了关键字参数,因此程序可以正确地输出1 2 3。
三、参数默认值
在定义函数时,可以设置函数参数的默认值。当调用函数时没有给出对应的参数值时,将使用参数的默认值。例如:
def func(a, b=2, c=3):
print(a, b, c)
func(1) # 输出:1 2 3
在上述代码中,定义了一个名为func()的函数,其中参数b和c都有默认值。当调用函数func(1)时,由于没有给b和c赋值,因此将使用它们的默认值,输出结果为1 2 3。
需要注意的是,在定义函数时,必须将默认参数放在位置参数后面,否则会引发语法错误。例如:
def func(a=1, b, c):
print(a, b, c)
# SyntaxError: non-default argument follows default argument
四、可变长度参数
如果一个函数需要接收可变数量的参数,可以使用可变长度参数。Python中有两种可变长度参数,分别为*args和**kwargs。
1、*args
*args表示接收任意数量的非关键字参数。在函数定义时,将*args放在任意位置参数的后面。例如:
def func(a, b, *args):
print(a, b, args)
func(1, 2, 3, 4, 5) # 输出:1 2 (3, 4, 5)
在上述代码中,函数func()有三个参数,其中第三个参数*args表示可以接收任意数量的非关键字参数。在调用函数func(1, 2, 3, 4, 5)时,实参3、4、5会被打包成一个元组(3, 4, 5),传递给参数*args。
2、**kwargs
**kwargs表示接收任意数量的关键字参数。在函数定义时,将**kwargs放在任意关键字参数的后面。例如:
def func(a, b, **kwargs):
print(a, b, kwargs)
func(1, 2, c=3, d=4, e=5) # 输出:1 2 {'c': 3, 'd': 4, 'e': 5}
在上述代码中,函数func()有三个参数,其中第三个参数**kwargs表示可以接收任意数量的关键字参数。在调用函数func(1, 2, c=3, d=4, e=5)时,实参c=3、d=4、e=5会被打包成一个字典{'c': 3, 'd': 4, 'e': 5},传递给参数**kwargs。
需要注意的是,*args和**kwargs只能出现在参数列表的最后面。
总结
Python中的函数参数传递方式有两种:位置参数和关键字参数。同时,在定义函数时可以设置参数的默认值,使用*args和**kwargs可接收任意数量的非关键字和关键字参数。在实际开发中,针对不同的需求,可以灵活使用不同的参数传递方式和参数类型。
