• 400-650-7353

    精品课程

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

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

    • 发布: python培训
    • 来源:python干货资料
    • 2021-02-09 15:32:45
    • 阅读()
    • 分享
    • 手机端入口

    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。 一键加群

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

    推荐阅读

    优就业:ujiuye

    关注中公优就业官方微信

    • 关注微信回复关键词“大礼包”,领80G学习资料
    QQ交流群
    领取免费网课
    (加群备注“网站”)
    IT培训交流群 加入群聊 +
    软件测试 加入群聊 +
    全链路UI/UE设计 加入群聊 +
    Python+人工智能 加入群聊 +
    互联网营销 加入群聊 +
    Java开发 加入群聊 +
    PHP开发 加入群聊 +
    VR/AR游戏开发 加入群聊 +
    大前端 加入群聊 +
    大数据 加入群聊 +
    Linux云计算 加入群聊 +
    优就业官方微信
    扫码回复关键词“大礼包”
    领取80G学习资料

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

    1 您的年龄

    2 您的学历

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

    获取测试结果
     
    课程资料、活动优惠 领取通道
     
     
    韩国毛茸茸的丰满妇女,亚洲国内自拍愉拍,高清性色生活片97,亚洲日本成本人观看 网站地图