Python *args 和 **kwargs
深入理解可变参数 · 难度:进阶 · +15XP
Python *args 和 **kwargs
Python *args 和 **kwargs — 灵活的函数参数
学习前的准备
打开 Python 交互式解释器。你需要了解 Python 函数的基本定义和参数传递方式。*args 和 **kwargs 是 Python 中看似神秘实则非常实用的特性。
什么是 *args?
*args 中的星号 * 表示“把传入的所有多余的位置参数收集到一个元组中”。
def add_all(*args):
print(f"收到了 {len(args)} 个参数:{args}")
return sum(args)
print(add_all(1, 2, 3)) # 6
print(add_all(1, 2, 3, 4, 5)) # 15
print(add_all()) # 0
# 结合普通参数:普通参数在前,*args 在后
def greet(message, *names):
for name in names:
print(f"{message},{name}!")
greet("你好", "张三", "李四", "王五")
什么是 **kwargs?
**kwargs 中的双星号 ** 表示“把传入的所有多余的关键字参数收集到一个字典中”。
def show_info(**kwargs):
print(f"收到了 {len(kwargs)} 个关键字参数")
for key, value in kwargs.items():
print(f" {key} = {value}")
show_info(name="张三", age=25, city="北京")
* 和 ** 的“拆包”用法
# * 拆包:把列表/元组拆成位置参数
def multiply(a, b, c):
return a * b * c
nums = [2, 3, 4]
print(multiply(*nums)) # 24
# ** 拆包:把字典拆成关键字参数
def describe(name, age, city):
print(f"{name},{age}岁,来自{city}")
info = {"name": "张三", "age": 25, "city": "上海"}
describe(**info)
小结
*args 收集多余的位置参数(元组),**kwargs 收集多余的关键字参数(字典)。定义函数时参数顺序是:普通参数、*args、默认参数、**kwargs。调用函数时,* 拆列表,** 拆字典。这两个特性让你的函数变得极其灵活。