• Python 收集参数与反转过程


    收集 参数

      简单的说,采用如下定义的函数

    def my_func(*param1, **param2):
    print *param1
    print **param2

      就是Python中的收集参数.即,所有位置参数会以元组的形式传递给函数my_func()的形式参数param,而位置参数之后的关键字参数会组成字典形式传递给函数my_func()的形式参数param2.

      示例如下:

    >>>my_func(1,2,3,foo='fooword',bar='barword')
    (1, 2, 3)
    {'foo': 'fooword', 'bar': 'barword'}

    如果只向函数传递位置参数或者只传递关键字参数,也是可以的. 如下:

    >>> my_func(bar='barword',foo='fooword')
    () {
    'foo': 'fooword', 'bar': 'barword'} >>> my_func(1,2,3) (1, 2, 3) {}

    如果在关键字参数后,再添加位置参数,该位置参数将不会被收集,如下:

    >>> my_func(1,2,foo='fooword',bar='barword')
    (1, 2)
    {'foo': 'fooword', 'bar': 'barword'}

      如果试图在位置参数前传递关键字参数,程序将抛出异常,如下:

    >>> my_func(first='firstword',1,2,foo='fooword',bar='barword')
      File "<stdin>", line 1
    SyntaxError: non-keyword arg after keyword arg

    反转过程

      既然,在定义函数时可以指定将参数收集为元组或字典,那么,在调用函数时,当然可以将实际参数存储于元组或字典中,传递给函数,这就称为反转过程.

      没有使用参数收集的函数

        如果一个函数正常定义,使用反转过程传递参数,示例如下:

    >>> def add(x,y):
    ...     return x+y
    ... 
    >>> t = (3,4)
    >>> m= add(*t)
    >>> print m
    7
    >>>m= add(t)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: add() takes exactly 2 arguments (1 given)

      使用参数收集函数

      如果一个函数使用参数收集,使用反转过程传递参数,示例如下:

    >>> d = {'foo':'fooword','bar':'barword'}
    >>> my_func(*t,**d)
    (3, 4)
    {'foo': 'fooword', 'bar': 'barword'}

      注意: 反转过程,将参数整合为一个元组或字典传递给函数,同样需要使用 *t (元组)或者  **d (字典) 的调用形式.

    收集参数的应用

      以位置参数为例,使用收集参数方法,可以一次传递多个参数.

    >>> def input_name(*name):
    ...     for n in name:
    ...             print "input is %s" % n
    ... 
    >>> input_name('John')
    input is John
    >>> input_name('John','Hank','Alice','Bob')
    input is John
    input is Hank
    input is Alice
    input is Bob

      收集参数,如果使用关键字参数,即收集到一个字典,使用方法类似于元组.

      收集参数中的 *  符号,被成为 "拼接操作符" (Splicing),使用拼接操作符传递参数,可以不用考虑参数的数量.

  • 相关阅读:
    GitHub Interesting Collection
    使用 CSS3 Flexible Boxes 布局
    消失的属性
    浅谈 JavaScript 模块化编程
    为你的 Javascript 加点咖喱
    软件测试
    osi七层模型
    3_Hydra(爆破神器)
    2_NC(瑞士军刀)
    1_HTTP协议详解
  • 原文地址:https://www.cnblogs.com/nomorewzx/p/4191242.html
Copyright © 2020-2023  润新知