可变参数 *args 与 **kwargs

文章顶部广告位
728×90 或 336×280

一、引言

函数可以接受任意数量的参数!*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」的相关知识。

可变参数很强大!下一章学习变量作用域!

文章中间广告位
600×300 或 300×250
← 上一篇 下一篇 →
文章底部广告位
728×90 或 300×250