Python函数传参:位置参数、默认参数和关键字参数
在 Python 中,我们可以在函数中使用多种传参方式,包括位置参数、默认参数和关键字参数。
位置参数是指在调用函数时按照定义时的顺序来传递参数。例如,定义一个加法函数:
def add(x, y):
return x + y
在调用时,我们需要按照定义时的顺序传递参数值,即先传递 x,再传递 y:
print(add(1, 2)) # 输出结果为 3
默认参数是指在函数定义时为参数指定默认值,在调用时可以不传递该参数。例如,定义一个函数用于打印用户信息,其中 age 参数设定了默认值:
def print_user_info(name, age=20):
print(f"Name: {name}, Age: {age}")
在调用该函数时,我们可以只传递必须的参数 name,而省略 age:
print_user_info("Tom") # 输出结果为 Name: Tom, Age: 20
当然,我们也可以传递 age 参数的值:
print_user_info("Tom", 25) # 输出结果为 Name: Tom, Age: 25
这里需要注意,当我们为函数参数指定了默认值后,相当于给该参数一个初始值,在函数调用时可以不传递该参数,而是直接使用该默认值。但如果在调用时传递了值,则会使用传递的值,而不是默认值。
关键字参数是在函数调用时通过指定参数名称来传递参数值。这种方式的好处在于可以不按照定义时的顺序来传递参数值,而且可以仅传递需要的参数。例如,我们定义一个函数用于计算矩形面积:
def rect_area(width, height):
return width * height
在调用该函数时,我们可以使用关键字参数来传递参数值:
print(rect_area(height=5, width=3)) # 输出结果为 15
这里需要注意的是,在使用关键字参数时,需要匹配参数名和参数值,否则会报错。
除了以上三种传参方式外,Python 还支持参数解构和 *args、**kwargs 两种特殊方式。
参数解构是指将多个参数打包成一个元组或字典,函数在调用时可以传入元组或字典,函数内部会自动解构成参数列表。例如,我们定义一个函数用于打印元组中的项:
def print_tuple(a, b):
print(f"a: {a}, b: {b}")
t = (1, 2)
print_tuple(*t) # 输出结果为 a: 1, b: 2
这里使用 * 运算符来解构元组,将其中两个项作为函数的两个参数传递。
类似地,我们也可以使用 ** 运算符来解构字典,将其中的键值对对应到函数的参数名和参数值:
def print_dict(a, b):
print(f"a: {a}, b: {b}")
d = {"a": 1, "b": 2}
print_dict(**d) # 输出结果为 a: 1, b: 2
这里传递了一个字典,将其中的键值对解构成两个参数传递给了函数。
最后,*args、**kwargs 分别是用于接收参数列表和关键字参数字典的特殊参数形式。*args 表示接收多个参数,它们作为一个元组传递给函数。**kwargs 表示接收多个关键字参数,它们作为一个字典传递给函数。例如,我们定义一个函数用于输出参数列表和关键字参数:
def print_args_kwargs(*args, **kwargs):
print(f"args: {args}")
print(f"kwargs: {kwargs}")
print_args_kwargs(1, 2, 3, a=4, b=5, c=6)
# 输出结果为
# args: (1, 2, 3)
# kwargs: {'a': 4, 'b': 5, 'c': 6}
在调用该函数时,我们传递了多个参数和关键字参数,它们被分别封装成了元组和字典,然后被传递给了 *args 和 **kwargs。
总结起来,Python 支持多种传参方式,包括位置参数、默认参数和关键字参数。此外,还有特殊的参数解构和 *args、**kwargs 参数形式。在函数使用过程中应当根据需求和实际情况选择合适的参数传递方式。
