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

简明Python 可变参数

时间:2017-12-17 14:11:00      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:简单   好的   argument   报错   log   cond   *args   size   book   

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)



 

简明Python 可变参数

标签:简单   好的   argument   报错   log   cond   *args   size   book   

原文地址:http://www.cnblogs.com/jdy113/p/8051839.html

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