• 简明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)



  • 相关阅读:
    常用PHP函数整理
    Linux常用命令整理
    Linux怎样创建FTP服务器
    设置ssh只允许用户从指定的IP登陆
    解决数据库不能远程连接方法
    [记录]ns_error_unexpected firefox tinymce
    $.parseJSON 将json 对象转换为array
    Flash cs6 帧上的菱形原来是关键帧
    [记录]java.math.biginteger cannot be cast to java.lang.long
    Flash cs6 如何从FLA 文件导出sound文件
  • 原文地址:https://www.cnblogs.com/jdy113/p/8051839.html
Copyright © 2020-2023  润新知