400-650-7353

精品课程

您所在的位置:首页 > IT干货资料 > python > 【Python基础知识】Python函数的可变位置参数和可变关键字参数

【Python基础知识】Python函数的可变位置参数和可变关键字参数

1)可变位置参数

在Python中,函数在定义时可以拥有任意数量的参数,这种参数称为可变参数。可以通过定义可变参数,来接收调用函数时多余的参数。可变参数又分为可变位置参数和可变关键字参数,它们的区别如下:

①可变位置参数用来接收调用函数时多余的位置参数;在函数体内,可变位置参数是一个元组。

②可变关键字参数用来接收调用函数时多余的关键字参数;在函数体内,可变关键字参数是一个字典。

可变位置参数是在普通的参数前面加一个星号“*”,一般命名为args(arguments的缩写),但实际上它可以用任意合法的名称:

  1. >>> def f(*args):   # *args是可变位置参数 
  2. ...     print(args)   # 打印args 
  3. ...     print(type(args))   # 打印args的类型 
  4. ...     for i in args:   # 迭代元组 
  5. ...         print(i) 
  6. ... 
  7. >>> f('Python'423.14
  8. ('Python'423.14
  9. <class 'tuple'
  10. Python 
  11. 42 
  12. 3.14 

由运行结果可知,可变位置参数在函数体内是一个元组。另外,函数体内的args不需要加星号。

在定义函数时,如果不确定所需要的参数个数,那么可以使用可变参数。假设要写一个算术加法运算的程序,不使用可变参数时,只能将确定个数的数字相加:

  1. >>> def add_numbers(a, b, c):   # 这个函数只能让三个数字相加 
  2. ...     print(a + b + c) 
  3. ...  
  4. >>> add_numbers(123
  5. 6 

如果使用可变参数,那么可以实现让任意个数的数字相加:

  1. >>> def add_numbers(*numbers):  # 将可变位置参数命名为numbers 
  2. ...     sum = 0 
  3. ...     for i in numbers:   # 由于numbers是元组,因此,可以使用for循环迭代 
  4. ...         sum += i 
  5. ...     print(sum) 
  6. ...  
  7. >>> add_numbers(123456
  8. 21 
  9. >>> add_numbers(421925
  10. 86 
  11. >>> add_numbers()   # 可变位置参数也可以传递0个参数 
  12. 0 

可变位置参数可以与普通的参数混用。假设要打印一份水果店的公告,其中第一个参数是普通的参数,代表水果店的名字,第二个参数是可变位置参数,用来接收除了水果店名字之外的其他位置参数:

  1. >>> def fruit_shop(shop_name, *fruits): 
  2. ...     print('{0}水果店开业啦!'.format(shop_name)) 
  3. ...     print('在售的水果有:'
  4. ...     for fruit in fruits: 
  5. ...         print(fruit) 
  6. ...  
  7. >>> fruit_shop('小明''苹果''香蕉''西瓜'
  8. 小明水果店开业啦! 
  9. 在售的水果有: 
  10. 苹果 
  11. 香蕉 
  12. 西瓜 

函数调用时,'小明'被shop_name接收,剩余的值都被*fruits接收,并存储在fruits元组中。

【Python基础知识】Python函数的可变位置参数和可变关键字参数

2)可变关键字参数

可变关键字参数是在普通的参数前面加两个星号“**”,一般命名为kwargs(keyword arguments的缩写),但实际上它可以用任意合法的名称:

  1. >>> def f(**kwargs):   # **kwargs是可变关键字参数 
  2. ...     print(kwargs) 
  3. ...     print(type(kwargs))   # 打印kwargs的类型 
  4. ...     for k, w in kwargs.items():   # 迭代字典 
  5. ...         print('{0}--{1}'.format(k, w)) 
  6. ...  
  7. >>> f(name='Ming', age=19)   # 使用关键字参数才能将值存储到kwargs中 
  8. {'name''Ming''age'19
  9. <class 'dict'
  10. name--Ming 
  11. age--19 
  12. >>> f()   # 可变关键字参数也可以传递0个参数 
  13. {} 

可变关键字参数可以与普通的参数混用。假设在前面的“水果店”程序中,不仅打印水果的名称,还打印水果的个数:

  1. >>> def fruit_shop_v2(shop_name, **fruits): 
  2. ...     print('{0}水果店开业啦!'.format(shop_name)) 
  3. ...     print('在售的水果有:'
  4. ...     for fruit, count in fruits.items():   # 迭代字典 
  5. ...         print('{0}{1}个'.format(fruit, count)) 
  6. ...  
  7. >>> fruit_shop_v2(shop_name='小明',  苹果=10, 香蕉=3, 橘子=201)   
  8. 小明水果店开业啦! 
  9. 在售的水果有: 
  10. 苹果10个 
  11. 香蕉3个 
  12. 橘子201个 

下面是一个更复杂的“水果店”程序,四个参数中,shop_name代表商店名称,open_time代表开业时间,*fruits代表水果种类,**other_info代表水果店还想打印的额外信息:

  1. >>> def fruit_shop_v3(shop_name, open_time='10月1日', *fruits, **other_info): 
  2. ...     print('{0}水果店将在{1}开业!'.format(shop_name, open_time)) 
  3. ...     if fruits: 
  4. ...         print('在售的水果有:'
  5. ...         for fruit in fruits: 
  6. ...             print(fruit) 
  7. ...     if other_info: 
  8. ...         print('以下是额外信息:'
  9. ...         for item, info in other_info.items(): 
  10. ...             print('{0}:{1}'.format(item, info)) 
  11. ... 
  12. >>> fruit_shop_v3('小明')   # shop_name既没默认值,又不是可变参数,故不能缺省 
  13. 小明水果店将在101日开业! 
  14. >>> fruit_shop_v3('小明''1月1日')   # 提供shop_name和open_time 
  15. 小明水果店将在11日开业! 
  16. >>> fruit_shop_v3(open_time='1月1日')   # 如果不指定shop_name的值,会报错 
  17. Traceback (most recent call last): 
  18.   File "<stdin>", line 1in <module> 
  19. TypeError: fruit_shop_v3() missing 1 required positional argument: 'shop_name' 
  20. >>> fruit_shop_v3('小明''苹果''香蕉''橘子')   
  21. 小明水果店将在苹果开业! 
  22. 在售的水果有: 
  23. 香蕉 
  24. 橘子 
  25. >>> fruit_shop_v3('小明''10月1日''苹果''香蕉''橘子'
  26. 小明水果店将在101日开业! 
  27. 在售的水果有: 
  28. 苹果 
  29. 香蕉 
  30. 橘子 
  31. >>>  
  32. >>> fruit_shop_v3('小明''10月1日''苹果''香蕉', 地址='北京市', 开店折扣='八折')   # 多余参数全部被**other_info接收 
  33. 小明水果店将在101日开业! 
  34. 在售的水果有: 
  35. 苹果 
  36. 香蕉 
  37. 以下是额外信息: 
  38. 地址:北京市 
  39. 开店折扣:八折 

 

课程好礼申请领取
您的姓名
您的电话
意向课程
 

中公优就业

官方QQ

扫描上方二维码或点击一键加群,免费领取价值599元网课,加群暗号:599。 一键加群

>>本文地址:
注:本站稿件未经许可不得转载,转载请保留出处及源文件地址。

推荐阅读

测一测
你适合学哪门IT技术?

1 您的年龄

2 您的学历

3 您更想做哪个方向的工作?

获取测试结果
 
课程资料、活动优惠 领取通道
 
 
网站地图 五星彩开奖号码 58彩票网平台 快乐彩票网官方网
申博开户官方网站 申博正网开户 申博娱乐官网 菲律宾申博太阳城官网
威尼斯人娱乐上网导航登入 福彩快3投注平台上海快3 港龙彩票东京28 金巴黎彩票网平台登录登入
快乐彩票网站 cc彩票平台官网 58彩票网游戏 500w彩票网网站
快乐彩票网站 五星彩票网客户端下载 cc彩票网投 五星彩票网官方网
16jbs.com dx138.com 8QHDS.COM 517XTD.COM 67jbs.com
11sbsg.com 2888DZ.COM 4888tyc.com 618cw.com 956SUN.COM
1112997.COM XSB385.COM 1112126.COM 8ZZS.COM 261SUN.COM
189sunbet.com 8LHS.COM 557XTD.COM 958psb.com S6189.COM