• 简明Python 可变参数


    复制代码
    1 def total(a=5, *numbers, **phonebook):
    2     print('a', a)
    3     #遍历元组中的所有项目
    4     for single_item in numbers:
    5         print('single_item', single_item)
    6     #遍历字典中的所有项目
    7     for first_part, second_part in phonebook.items():
    8         print(first_part,second_part)
    9 print(total(10,1,2,3,Jack=1123,John=2231,Inge=1560))            
    复制代码
    复制代码
    1 a 10
    2 single_item 1
    3 single_item 2
    4 single_item 3
    5 Inge 1560
    6 John 2231
    7 Jack 1123
    8 None
    复制代码

    当我们声明一个诸如 *param 的星号参数时,从此处开始直到结束的所有位置参数 (Positional Arguments)都将被收集并汇集成一个称为“param”的元组(Tuple)。 类似地,当我们声明一个诸如 **param 的双星号参数时,从此处开始直至结束的所有关键字 参数都将被收集并汇集成一个名为 param 的字典(Dictionary)。

    *args

    复制代码
    1 def argsFunc(a, *args):
    2     print a
    3     print args
    4     
    5 >>> argsFunc(1, 2, 3, 4)
    6 1
    7 (2, 3, 4)
    复制代码

    argsFunc 中匹配完定义好的参数,剩余的参数以元组的形式存储在 args(args 名称你可以自行定义),因此在上述程序中只要你传入不小于 1 个参数,该函数都会接受,当然你也可以直接定义只接受可变参数,你就可以自由传递你的参数:

    复制代码
    1 def argsFunc(*my_args):
    2     print my_args
    3     
    4 >>> argsFunc(1, 2, 3, 4)
    5 (1, 2, 3, 4)
    6 >>> argsFunc()
    7 ()
    复制代码

    很简单把,现在来将另一个种不定参数形式

    **kwargs

    形参名前加两个*表示,参数在函数内部将被存放在以形式名为标识符的 dictionary 中,这时调用函数的方法则需要采用 arg1=value1,arg2=value2 这样的形式。

    为了区分,我把 *args 称作为数组参数,**kwargs 称作为字典参数

    >>> def a(**x):print x
    >>> a(x=1,y=2,z=3)
    {'y': 2, 'x': 1, 'z': 3} #存放在字典中
    

    不过,有个需要注意,采用 **kwargs 传递参数的时候,你不能传递数组参数

    >>> a(1,2,3) #这种调用则报错
    Traceback (most recent call last):
      		File "<stdin>", line 1, in <module>
    TypeError: a() takes exactly 0 arguments (3 given)
  • 相关阅读:
    日志管理工具logrotate
    springboot2整合logback.xml动态修改日志打印级别
    mybatis框架之装饰模式
    mybatis源码分析之06二级缓存
    后勤信息反馈---场景描述
    《人月神话》读后感---计算机产品的文档
    android studio 使用第三方模拟器连接方法
    第八周总结
    Android Studio 和 SDK 下载、安装和环境变量配置
    求最大子数组并单步显示
  • 原文地址:https://www.cnblogs.com/imshome/p/8438194.html
Copyright © 2020-2023  润新知