*args :单星号传入元组
def argsFunc(a, *args):
print a
print args
>>> argsFunc(1, 2, 3, 4)
1
(2, 3, 4)
def argsFunc(*my_args):
print my_args
>>> argsFunc(1, 2, 3, 4)
(1, 2, 3, 4)
>>> argsFunc()
()
**kwargs:双星号传入map
形参名前加两个*表示,参数在函数内部将被存放在以形式名为标识符的 dictionary
中,这时调用函数的方法则需要采用 arg1=value1,arg2=value2
这样的形式。
用法一、
>>> def a(**x):print x
>>> a(x=1,y=2,z=3)
{'y': 2, 'x': 1, 'z': 3} #存放在字典中
用法二、
#!/usr/bin/python
# -*- coding: utf-8 -*-
import json
def funcTest(**kwargs):
b={"a":0,"b":0,"c":0}
b["a"]=kwargs["a"]
b["b"] = kwargs["b"]
print b #{'a': 1, 'c': 0, 'b': 2}
a={"a":1,"b":2,"c":3}
funcTest(**a)
用法三、
混合使用
def print_param_1(x,y,z=3,*poster,**keypar):
print x,y,z
print poster
print keypar
>>> print_param_1(1,2,3,5,6,7,foo=1,bar="22")
1 2 3
(5, 6, 7)
{'foo': 1, 'bar': '22'}
>>> print_param_1(444,555,65,'sec_1','sec_2',foo=1, last='last_p')
444 555 65
('sec_1', 'sec_2')
{'foo': 1, 'last': 'last_p'}
混合使用后,可以很方便的动态传入不同个数、不同类型的参数了。
参考:https://blog.csdn.net/xylin1012/article/details/81236122