在python中,我们常常会看见*args和**kwargs这样的写法。其实这是编程人员约定的变量名字,args 是 arguments 的缩写,表示位置参数;kwargs 是 keyword arguments 的缩写,表示关键字参数。这其实就是 Python 中可变参数的两种形式,并且 *args 必须放在 **kwargs 的前面,因为位置参数在关键字参数的前面。
*args
用于传递一个任意数量的位置参数(非关键字参数)。这些参数会被收集到一个 元组 中。
示例:
Python复制
def test_args(*args):
print(args) # args 是一个元组
# 调用函数
test_args(1, 2, 3, "a", "b")
输出:
(1, 2, 3, 'a', 'b')
使用场景:
当你需要传递多个参数,但不确定具体有多少个时。
当你需要将这些参数传递给其他函数时(例如,函数嵌套调用)。
**kwargs
用于传递一个任意数量的关键字参数。这些参数会被收集到一个 字典 中。
示例:
def test_kwargs(**kwargs):
print(kwargs) # kwargs 是一个字典
# 调用函数
test_kwargs(name="Alice", age=25, city="New York")
输出:
{'name': 'Alice', 'age': 25, 'city': 'New York'}
使用场景:
当你需要传递多个键值对参数时。
当你需要让函数处理复杂的数据结构(如字典)时。
同时使用 *args
和 **kwargs
,*args
用于处理位置参数,而 **kwargs
用于处理关键字参数。
示例:
def test_args_kwargs(*args, **kwargs):
print("Positional arguments:", args)
print("Keyword arguments:", kwargs)
# 调用函数
test_args_kwargs(1, 2, 3, name="Alice", age=25)
输出:
Positional arguments: (1, 2, 3)
Keyword arguments: {'name': 'Alice', 'age': 25}
使用场景:
当你需要同时处理位置参数和关键字参数时。
当你需要设计一个通用的接口,允许用户传递任意数量的参数和关键字时。
你也可以使用 *
和 **
来解包已有的列表或字典,将其作为参数传递给函数。
示例:
def test_function(a, b, c):
print(a, b, c)
# 使用 *args 解包列表
my_args = [1, 2, 3]
test_function(*my_args) # 等价于 test_function(1, 2, 3)
# 使用 **kwargs 解包字典
my_kwargs = {"a": 4, "b": 5, "c": 6}
test_function(**my_kwargs) # 等价于 test_function(a=4, b=5, c=6)
输出:
1 2 3
4 5 6
快速学会python函数中的*args和**kwargs_哔哩哔哩_bilibili