简明Python 可变参数

https://www.cnblogs.com/jdy113/p/8051839.html

复制代码
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)


猜你喜欢

转载自blog.csdn.net/hshl1214/article/details/80284960
今日推荐