Python 中函数的 收集参数 机制
2011-03-31 23:38
288 查看
编写函数,很多情况下我们都会传递一系列值作为参数。为了让用户更加方便地给函数提供任意多的值作为参数, Python 中实现了一个 收集参数 的机制:在参数名前面加星号 ( * )。即: def cParam( *params ): pass 。来几行代码看看具体情况:
我们看到,定义函数的时候,在参数前加了一个 * 号,函数可以接收零个或多个值作为参数。返回结果是一个元组。
传递零个参数时函数并不报错,而是返回一个空元组。
但以上这种方法也有局限性,它不能收集关键字参数,即:
我们看到,它返回了一个 TypeError 。这时,对关键字参数进行收集的另一种 收集参数 机制闪亮登场。使用两个星号 ( ** ) ,用法同上。
最后返回一个以参数名为键、参数值为键值的字典。
* 和 ** 是可以一起使用的,返回特定的结果。
参数收集的用处之一是使我们编写函数时不用头疼将 N 多个参数都塞在一个括号里,既美观又省事。用处之二便是:
* :可以将一系列值存放进一个元组变量里,可用该元组变量名加一个 * 号作为参数传递给一个正被调用的函数,而后该函数就可以自由地对这些值进行一系列合法的操作。
** :同理,只不过变量存放的方式是字典。
完。
>>> def cParam( *params ): print params >>> cParam(1) (1,) >>> cParam(1, 2) (1, 2) >>> cParam() () >>>
我们看到,定义函数的时候,在参数前加了一个 * 号,函数可以接收零个或多个值作为参数。返回结果是一个元组。
传递零个参数时函数并不报错,而是返回一个空元组。
但以上这种方法也有局限性,它不能收集关键字参数,即:
>>> cParam(1,2,3, h=4) Traceback (most recent call last): File "<pyshell#6>", line 1, in <module> cParam(1,2,3, h=4) TypeError: cParam() got an unexpected keyword argument 'h' >>>
我们看到,它返回了一个 TypeError 。这时,对关键字参数进行收集的另一种 收集参数 机制闪亮登场。使用两个星号 ( ** ) ,用法同上。
>>> def ccParam( **params ): print params >>> ccParam( a=1, b=2, c=3 ) {'a': 1, 'c': 3, 'b': 2} >>> ccParam() {} >>>
最后返回一个以参数名为键、参数值为键值的字典。
* 和 ** 是可以一起使用的,返回特定的结果。
>>> cccParam(1,2,3, a=4,b=5) (1, 2, 3) {'a': 4, 'b': 5} >>> def cccParam_2(x,y,z=3, *params1, **params2): print x,y,z print params1 print params2 >>> cccParam_2(1,2,3,a=4,b=5) 1 2 3 () {'a': 4, 'b': 5} >>>
参数收集的用处之一是使我们编写函数时不用头疼将 N 多个参数都塞在一个括号里,既美观又省事。用处之二便是:
* :可以将一系列值存放进一个元组变量里,可用该元组变量名加一个 * 号作为参数传递给一个正被调用的函数,而后该函数就可以自由地对这些值进行一系列合法的操作。
** :同理,只不过变量存放的方式是字典。
>>> def add(x, y): return x + y >>> param = (1, 2) >>> add( *param ) 3 >>> >>> >>> def useDict( **kwds ): print kwds["name"], " is ", kwds["age"], " years old." >>> args = {"name": "oyzway", "age": 23} >>> useDict( **args ) oyzway is 23 years old. >>>
完。
相关文章推荐
- Python 中函数的 收集参数 机制
- Python语言中函数的参数传递机制
- Python 函数参数传递机制.
- 【python】函数:函数文档、关键字参数、默认参数、收集参数
- Python3基础 函数 收集参数+普通参数 的示例
- python 点滴记录11:函数参数的收集
- python函数参数收集及其反转
- 关于C语言中函数调用和参数传递机制的探讨(二 .传递一个参数)
- python 函数参数的传递(参数带星号的说明)
- 对于qt5的信号机制的一点参考,然后利用模板实现:在新线程执行可变函数参数的调用
- Python-函数的参数顺序
- C/C++中的函数参数传递机制
- 【 Python 】函数的参数
- Python: 函数参数魔法
- Python函数参数到底是按值还是按引用
- Python函数的可变参数
- 深入讨论Python函数的参数的默认值所引发的问题的原因
- Python函数参数传值问题
- 小议Python中自定义函数的可变参数的使用及注意点
- Python:函数参数