简明Python 可变参数

Posted 董昱锦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简明Python 可变参数相关的知识,希望对你有一定的参考价值。

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 可变参数的主要内容,如果未能解决你的问题,请参考以下文章

简明 Python 教程

《简明 Python 教程》笔记

简明python笔记

python函数默认参数为可变对象的理解

Python3 简明教程学习(上)

Python中函数的参数定义和可变参数