*args和**kwargs在函数定义时作为形式参数以及在函数调用时作为实际参数有不同的功能。下面通过以下案例来讲解两者的不同之处。
1. 作为形式参数
*args: 收集实际参数到args的元组中
**kwargs: 收集关键字实际参数到kwargs的字典中。
注意: args和kwargs仅仅是形式参数的名字,所以可以随意定义
案例一:
1. # 由于爱好不知道多少个,所以使用一个hobbyy
2. def intro(name, age, *hobbys):
3. print(name,age)
4. print(type(hobbys))
5. for hobby in hobbys:
6. print(hobby)
7.
8.
9. intro("张三", 20, "打篮球", "踢足球", "打游戏")
结果:
张三 20
打篮球
踢足球
打游戏
案例二:
1. # 由于不知道多少个人信息,所以使用一个info,其他的实际参数必须使用关键字参数
2. def intro2(name, age, **info):
3. print(name, age)
4. print(type(info))
5. for key, value in info.items():
6. print(key, "==", value)
7.
8.
9. intro2("张三", 20, sex="男", height=1.75, weight="75KG")
结果:
张三 20
sex == 男
height == 1.75
weight == 75KG
2. 作为实际参数
*args:将args的元组展开传递给形式参数
**kwargs: 将kwargs的字典展开传递给形式参数
注意: args和kwargs仅仅是实际参数的名字,所以可以随意定义。
案例一:
1. # 由于爱好不知道多少个,所以使用一个hobbyy
2. def intro(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. def intro2(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
感谢源码时代教学讲师提供此文章!
本文为原创文章,转载请注明出处!
领取专属 10元无门槛券
私享最新 技术干货