字典解包传参
在Python中,****kwargs**是一种通过字典解包 (dictionary unpacking) 的方式进行参数传递的方式。它将一个字典的键值对解包并传递给函数的命名参数。
示例代码
kwargs实参: {'name': "jordan", 'age': 18, 'score': [80, 85, 85]}
get_info形参: age, name, score, sex="man"
实参的key和get_info的形参名字要一一不然无法注入
传入**kwargs的时候, kwargs会将字典中的每个key与形参对应注入值,
情况1: 形参中必须要有kwargs中的所有key, 否则会报错,
情况2: 如果形参中有非kwargs中的key则需要设置默认值,不然也会报错
def get_info(age, name, score, sex="man"):
human = {"name": name, "age": age, "total_score":sum(score), "sex": sex}
return human
if __name__ == '__main__':
# 创建一个包含参数的字典
kwargs= {'name': "jordan", 'age': 18, 'score': [80, 85, 85]}
# 使用字典解包的方式传递参数
res_score = get_info(**kwargs)
print("res_score: {}".format(res_score))
**kwargs 是用于将可变长度的关键字参数传递给一个函数。kwargs 代表 “keyword arguments” (关键字参数)。当一个函数定义中使用 **kwargs,它允许函数接受任意数量的关键字参数并将它们作为一个字典处理。
执行结果
情况1: 形参中必须要有kwargs中的所有key, 否则会报错
kwargs中有score的key,但是函数中没有
def get_info(age, name):
human = {"name": name, "age": age}
return human
if __name__ == '__main__':
# 创建一个包含参数的字典
kwargs= {'name': "jordan", 'age': 18, 'score': [80, 85, 85]}
# 使用字典解包的方式传递参数
res_score = get_info(**kwargs)
print("res_score: {}".format(res_score))
报错如下:
解决方法
加一个变量名字
def get_info(age, name, score):
情况2: 如果形参中有非kwargs中的key则需要设置默认值,不然也会报错
kwargs中没有值为sex的key,但是函数形参中有且没有设置默认值,所以会报错
def get_info(age, name, score, sex):
human = {"name": name, "age": age, "total_score":sum(score), "sex": sex}
return human
if __name__ == '__main__':
# 创建一个包含参数的字典
kwargs= {'name': "jordan", 'age': 18, 'score': [80, 85, 85]}
# 使用字典解包的方式传递参数
res_score = get_info(**kwargs)
print("res_score: {}".format(res_score))
如下报错
解决方法
1.在get_info给sex设置一个默认参数值
def get_info(age, name, score, sex="man"):
human = {"name": name, "age": age, "total_score":sum(score), "sex": sex}
return human
if __name__ == '__main__':
# 创建一个包含参数的字典
kwargs= {'name': "jordan", 'age': 18, 'score': [80, 85, 85]}
# 使用字典解包的方式传递参数
res_score = get_info(**kwargs)
print("res_score: {}".format(res_score))
2.调用的get_info的时候额外传入一个参数
def get_info(age, name, score, sex):
human = {"name": name, "age": age, "total_score":sum(score), "sex": sex}
return human
if __name__ == '__main__':
# 创建一个包含参数的字典
kwargs= {'name': "jordan", 'age': 18, 'score': [80, 85, 85]}
# 使用字典解包的方式传递参数
res_score = get_info(**kwargs, sex="man")
print("res_score: {}".format(res_score))
其他案例
def get_info(age, name, score, sex):
human = {"name": name, "age": age, "total_score":sum(score), "sex": sex}
return human
if __name__ == '__main__':
# 创建一个包含参数的字典
kwargs= {'name': "jordan", 'age': 18, 'score': [80, 85, 85]}
kwargs2= {"sex": "man"}
# 使用字典解包的方式传递参数
res_score = get_info(**kwargs, **kwargs2)
print("res_score: {}".format(res_score))