1.6 多类型传值和冗余参数
元组和列表
list1 = [1,2]
def fun(x,y):
print x,y
fun(*list1) \\tuple和list可以加个*来直接传参,注意参数的个数要一直,注意传多个参数的时候*必须放在赋值参数后面
list1 = [1,2]
def fun(x,y,z):
print x,y,z
字典
dic1 = {'a':1,'b':2} \\注意,字典的key一定要和函数的形参一致
def fun(a,b):
print a,b
fun(**dic1)
冗余参数
def fun(x,*args,**kwargs): \\其中*args和**kwargs就是冗余参数
print x
print args
print kwargs
fun(1)
----------
1
()
{} 函数正常运行,不会报错
fun(1,'a','b','c')
----------
1
('a', 'b', 'c')
{}
fun(1,'a','b','c',k1='v1',k2='v2')
----------
1
('a', 'b', 'c')
{'k2': 'v2', 'k1': 'v1'}
多出的参数会放到args这个变量里,多出的k-v参数会放到kwargs里,注意,其中k不能和之前定义的参数重复,且不加引号,value需要加引号
1.7 函数的递归调用
通俗地讲就是自己调用自己
注意,递归调用最后必须有默认结果,比如if n==0递归参数必须是向默认结果收敛的
比如计算阶乘
普通算法
def fun(n):
sum = 1
for i in range(1, n + 1):
sum *= i
return sum
print fun(5)
----------
120
递归调用
def fun(n):
if n == 0 : //这一个判断可使得当n=0的时候停止递归调用,防止出现死循环
return 1
else :
return n * fun(n-1)
print fun(5)
----------
120