函数的多类型传值和冗余参数
多类型传值
先上例子:
def fun(x, y, z):
return x + y + z
t = (1, 2, 3) #定义一个元组
fun(*t) #把元组作为函数的参数,不加*号会报错
#执行后的结果为
>>> 6
t1 = (4, 5) #定义一个元组
fun(6,*t1) #元组作为参数的一部分,这两个参数不能颠倒顺序,即不能fun(*t1, 6)调用
#执行后的结果为
>>> 15
dic1 = {'x':1, 'z':3, 'y':2} #定义一个字典
fun(**dic1) #字典作为参数传给函数,需要在字典名前加两个*,需要注意,字典中的key必须和函数中的形参名相同
#执行后的结果为
>>> 6
冗余参数
处理多余参数(接收多余参数)
def func(x,*args,**kwargs):
定义了x命名参数,和两个多类型参数,作为冗余参数,*args接受的参数放到元组中,**kwargs接受的字典或者默认参数放到了字典中
默认情况下至少传递一个命名参数,如果传的参数多的话,则存到args中(以元组的形式),如果传递的是字典,或者变量的默认(例x=1)值等(以字典的形式存储)
def func(x,*args,**kwargs):
print x
print args
print kwargs
func(1,2,'b',a=123)
(2,'b')
{'a': 123}
函数的递归调用
递归调用就是在函数内部调用函数自己,通常用它来计算阶乘,累加等
注意:
- 必须有最后的默认结果
if n ==0 - 递归参数必须向默认结果收敛
factorial(n-1)
例子:
求10的阶乘
#!/usr/bin/python
def factorial(n):
if n == 0: # 最后的默认结果
return 1
else:
return n * factorial(n-1) # n-1 实现参数收敛
print factorial(10)
求100的累加
#!/usr/bin/python
def factorial(n):
if n == 0: # 最后的默认结果
return 0
else:
return n + factorial(n-1) # n-1 实现参数收敛
print factorial(100)