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