文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Python 中函数的 收集参数 机制

Python 中函数的 收集参数 机制

时间:2011-03-31  来源:oyzway

编写函数,很多情况下我们都会传递一系列值作为参数。为了让用户更加方便地给函数提供任意多的值作为参数, Python 中实现了一个 收集参数 的机制:在参数名前面加星号 ( * )。即: def cParam( *params ): pass 。来几行代码看看具体情况:

 1 >>> def cParam( *params ):
2 print params
3
4 >>> cParam(1)
5 (1,)
6 >>> cParam(1, 2)
7 (1, 2)
8 >>> cParam()
9 ()
10 >>>

我们看到,定义函数的时候,在参数前加了一个 * 号,函数可以接收零个或多个值作为参数。返回结果是一个元组。

传递零个参数时函数并不报错,而是返回一个空元组。

但以上这种方法也有局限性,它不能收集关键字参数,即:

>>> 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 。这时,对关键字参数进行收集的另一种 收集参数 机制闪亮登场。使用两个星号 ( ** ) ,用法同上。

1 >>> def ccParam( **params ):
2 print params
3
4 >>> ccParam( a=1, b=2, c=3 )
5 {'a': 1, 'c': 3, 'b': 2}
6 >>> ccParam()
7 {}
8 >>>

最后返回一个以参数名为键、参数值为键值的字典。

* 和 ** 是可以一起使用的,返回特定的结果。

 1 >>> cccParam(1,2,3, a=4,b=5)
2 (1, 2, 3)
3 {'a': 4, 'b': 5}
4 >>> def cccParam_2(x,y,z=3, *params1, **params2):
5 print x,y,z
6 print params1
7 print params2
8
9
10 >>> cccParam_2(1,2,3,a=4,b=5)
11 1 2 3
12 ()
13 {'a': 4, 'b': 5}
14 >>>

参数收集的用处之一是使我们编写函数时不用头疼将 N 多个参数都塞在一个括号里,既美观又省事。用处之二便是:

* :可以将一系列值存放进一个元组变量里,可用该元组变量名加一个 * 号作为参数传递给一个正被调用的函数,而后该函数就可以自由地对这些值进行一系列合法的操作。

** :同理,只不过变量存放的方式是字典。

 1 >>> def add(x, y):
2 return x + y
3
4 >>> param = (1, 2)
5 >>> add( *param )
6 3
7 >>>
8 >>>
9 >>> def useDict( **kwds ):
10 print kwds["name"], " is ", kwds["age"], " years old."
11
12 >>> args = {"name": "oyzway", "age": 23}
13 >>> useDict( **args )
14 oyzway is 23 years old.
15 >>>

完。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载