码迷,mamicode.com
首页 > 编程语言 > 详细

Python 收集参数与反转过程

时间:2014-12-29 11:58:47      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:

收集 参数

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

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),使用拼接操作符传递参数,可以不用考虑参数的数量.

Python 收集参数与反转过程

标签:

原文地址:http://www.cnblogs.com/nomorewzx/p/4191242.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!