內功篇-Day40 不定长关键字参数 **kwargs

0 次阅读 2026-10-19 08:40

📖 知识点

什么是 **kwargs

  • **kwargs 接收不定数量的关键字参数,自动打包成字典 dict

  • kwargs 是约定名称,你也可以写 **data,但行业习惯使用 kwargs

  • 定义函数时:**kwargs 必须写在所有参数的最后面

  • 传入参数形式:key=value,自动变成字典的键值对

基础示例

def show_info(**kwargs):
    print(kwargs)
    print(type(kwargs))

show_info(name="悟空", age=20, skill="七十二变")

输出:

{'name': '悟空', 'age': 20, 'skill': '七十二变'}
<class 'dict'>

搭配普通参数 + *args 一起使用(顺序规则:普通参数 → *args → **kwargs)

def func(name, *args, **kwargs):
    print(name)
    print(args)
    print(kwargs)

func("唐僧", 100, 200, weapon="禅杖", mount="白龙马")

⚠️ 重点提醒:

  1. 只能用 key=value 形式传参给 kwargs,不能传位置参数

  2. 函数参数顺序不能乱:普通参数 > *args > **kwargs

⚔️ Kata 实战任务

任务需求:

  1. 定义函数 print_user_info(**kwargs)

  2. 遍历 kwargs 字典,打印每一条用户信息:键:值

  3. 分别调用 2 次:

    • 第一次:name="张三", age=18, city="北京"

    • 第二次:name="李四", hobby="读书"

  4. 函数无返回值,直接在内部打印信息

参考代码

def print_user_info(**kwargs):
    for k, v in kwargs.items():
        print(f"{k}:{v}")

print("==== 用户1信息 ====")
print_user_info(name="张三", age=18, city="北京")

print("==== 用户2信息 ====")
print_user_info(name="李四", hobby="读书")

运行输出:

==== 用户1信息 ====
name:张三
age:18
city:北京
==== 用户2信息 ====
name:李四
hobby:读书

🧠 思考题

  1. 能不能把 **kwargs 写在 *args 的前面?运行会发生什么?

  2. **kwargs 拿到的是字典,想一想,如果想要同时接收任意位置参数 + 任意关键字参数,函数参数该怎么写?