一、引言
函数可以接受任意数量的参数!*args 和 **kwargs 是利器!
💡 *args 接收任意位置参数,**kwargs 接收任意关键字参数!
二、*args:可变位置参数
# *args 接收任意多个位置参数,变成元组
def sum_all(*args):
"""计算所有参数的和"""
print(f"args 的类型是:{type(args)}") # tuple
return sum(args)
print(sum_all(1, 2, 3)) # 6
print(sum_all(1, 2, 3, 4, 5)) # 15
print(sum_all(10)) # 10
三、**kwargs:可变关键字参数
# **kwargs 接收任意多个关键字参数,变成字典
def print_info(**kwargs):
"""打印所有信息"""
print(f"kwargs 的类型是:{type(kwargs)}") # dict
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="张三", age=25, city="北京")
print_info(product="Python教程", price=99)
四、组合使用:顺序很重要
# 参数顺序:位置参数 → *args → 默认参数 → **kwargs
def func(a, b, *args, c=10, **kwargs):
print(f"a={a}, b={b}")
print(f"args={args}")
print(f"c={c}")
print(f"kwargs={kwargs}")
func(1, 2, 3, 4, 5, d=6, e=7)
五、解包参数
# 用 * 解包列表/元组
def add(a, b, c):
return a + b + c
lst = [1, 2, 3]
print(add(*lst)) # 6,等价于 add(1,2,3)
# 用 ** 解包字典
dic = {"a": 10, "b": 20, "c": 30}
print(add(**dic)) # 60,等价于 add(a=10,b=20,c=30)
六、课后练习题
# 练习 1:写一个函数接收任意多个数,返回它们的积
# 练习 2:写一个函数接收任意多个关键字参数,打印出来
# 练习 3:结合 * 和 ** 解包参数调用函数
总结
通过本章学习,你应该已经掌握了「可变参数 *args 与 **kwargs」的相关知识。
可变参数很强大!下一章学习变量作用域!