📖 知识点
什么是 **kwargs
**kwargs接收不定数量的关键字参数,自动打包成字典 dictkwargs 是约定名称,你也可以写
**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="白龙马")⚠️ 重点提醒:
只能用
key=value形式传参给 kwargs,不能传位置参数函数参数顺序不能乱:普通参数 > *args > **kwargs
⚔️ Kata 实战任务
任务需求:
定义函数
print_user_info(**kwargs)遍历 kwargs 字典,打印每一条用户信息:
键:值分别调用 2 次:
第一次:name="张三", age=18, city="北京"
第二次:name="李四", hobby="读书"
函数无返回值,直接在内部打印信息
参考代码
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:读书🧠 思考题
能不能把
**kwargs写在*args的前面?运行会发生什么?**kwargs拿到的是字典,想一想,如果想要同时接收任意位置参数 + 任意关键字参数,函数参数该怎么写?