在某些情况下,我们不能定义函数的时候,就确定参数的数量和内容,这时候就可以使用可变参数。可变参数和之前学过的有些不同,可变参数声明时不会命名,基本语法:
some_func(*args, **kwargs)
参数说明:
some_func为函数名
*args **kwargs 为可变参数
举例:
#!/use/bin/env python2.7
# -*_ coding: utf-8 _8_
def foo(*args):
print (args)
foo()
foo (1, 2)
foo ("元始天尊", "xian", 20)
结果:.
()
(1, 2)
('元始天尊', 'xian', 20)
从中可以看出, “*args”参数获取到的是一个元组,这也正是它能作为可变参数的原因,
在看 **kwargs 的输出:
举例:
#!/use/bin/env python2.7
# -*_ coding: utf-8 _8_
def foo(**kwargs):
print (kwargs)
foo()
foo ()
foo (name="元始天尊", 地域='xian', 数字=20)
结果:
{}
{}
{'name': '元始天尊', '地域': 'xian', '数字': 20}
可以看出, “**kwargs” 参数获取到的是一个字典,所以,我们在调用函数时候 ,,也必须要使用关键字参数的方式才传递参数。
日常中使用, “*args” 和 “**kwargs” 经常出现,用于解决一些未知的情况
举例:
#!/use/bin/env python2.7
# -*_ coding: utf-8 _8_
def hankai_ceshi(*args, **kwargs):
s = 0
for i in args:
s += i
print ("输入的数字之和是:", s)
for k,v in kwargs.items():
print (k,v)
hankai_ceshi(1,1,2,3,4,5, 姓名="韩锴")
执行结果:
输入的数字之和是: 16
姓名 韩锴
正如上述结果,我们在不知道有多少数字需要求和的时候,可以使用可变参数来获取参数中所有数字之和。
不止在函数定义时,可以使用 ”*“ 和 ”**“ 来声明参数,子啊函数调用时,也可以使用相同的方式来传递未知的参数
#!/use/bin/env python2.7
# -*_ coding: utf-8 _8_
def hankai_ceshi(*args, **kwargs):
print (args)
print (kwargs)
l = [1,2,3,4]
al = [1,2,"韩锴","python"]
d = {"参数1":"args1", "参数2":"args2"}
bcd = {"参数3":"args3", "参数4":"args4"}
hankai_ceshi(*l,**d)
hankai_ceshi(*al,**bcd)
执行结果:
(1, 2, 3, 4)
{'参数1': 'args1', '参数2': 'args2'}
(1, 2, '韩锴', 'python')
{'参数3': 'args3', '参数4': 'args4'}
从中可以看出,无论时参数调用还是函数定义的参数都能以 some_func(*args,**kwargs) 的悉尼港是调用



