对Python中 xargs和xxkwargs 的详解

*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

感谢源码时代教学讲师提供此文章!

本文为原创文章,转载请注明出处!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180508A12NAN00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券