*args和**kwargs在函数定义时作为形式参数以及在函数调用时作为实际参数有不同的功能。下面通过以下案例来讲解两者的不同之处。
1.作为形式参数
*args:收集实际参数到args的元组中
**kwargs:收集关键字实际参数到kwargs的字典中。
注意:args和kwargs仅仅是形式参数的名字,所以可以随意定义
案例一:
1. #由于爱好不知道多少个,所以使用一个hobbyy
2.defintro(name, age, *hobbys):
3. print(name,age)
4. print(type(hobbys))
5. forhobbyinhobbys:
6. print(hobby)
7.
8.
9. intro("张三", 20, "打篮球", "踢足球", "打游戏")
结果:
张三20
<class 'tuple'>
打篮球
踢足球
打游戏
案例二:
1. #由于不知道多少个人信息,所以使用一个info,其他的实际参数必须使用关键字参数
2.defintro2(name, age, **info):
3. print(name, age)
4. print(type(info))
5. forkey, valueininfo.items():
6. print(key, "==", value)
7.
8.
9. intro2("张三", 20, sex="男", height=1.75, weight="75KG")
结果:
张三20
<class 'dict'>
sex ==男
height == 1.75
weight == 75KG
2.作为实际参数
*args:将args的元组展开传递给形式参数
**kwargs:将kwargs的字典展开传递给形式参数
注意:args和kwargs仅仅是实际参数的名字,所以可以随意定义。
案例一:
1. #由于爱好不知道多少个,所以使用一个hobbyy
2.defintro(name, age, hobby1, hobby2, hobby3):
3. print(name, age)
4. print(hobby1)
5. print(hobby2)
6. print(hobby3)
7.
8.
9. hobbys = ("打篮球", "踢足球", "打游戏")
10. #由于intro函数中需要多个函数,刚好hobbys的元组中包含这些爱好
11. intro("张三", 20, *hobbys)
结果:
张三20
打篮球
踢足球
打游戏
案例二:
1.defintro2(name, age, sex, height, weight):
2. print(name, age, sex, height, weight)
3.
4.
5. info = {"sex": "男", "height": 1.75, "weight": "75KG"}
6. # intro2中需要sex,height,weight的实际参数,刚好info字典中包含这些参数
7. intro2("张三", 20, **info)
结果:
张三20男1.75 75KG
感谢源码时代教学讲师提供此文章!
本文为原创文章,转载请注明出处!