通過help(函數名) 可以查看函數的作用
abs() 函數:取絕對值
cmp()函數:比較大小 比較函數cmp(x, y)就需要兩個參數,如果x小於y,返回-1,如果x==y,返回0,如果x>y,返回1
數據類型轉換函數,int()函數,float函數等
函數名其實就是指向一個函數對象的引用,完全可以把函數名賦給一個變量,相當於給這個函數起了一個別名:
eg ; a =abs a(-1)
定義函數
在python中,定義一個函數要使用def語句,依次函數名,括號,括號中的參數,和冒號,然後在縮進塊中編寫函數體,函數的返回值用return語句返回
def my_area(x):
return area =3.14*x*x
如果沒有return語句,函數執行完畢後也會返回結果,只是結果爲Nome,return None 可以簡寫爲return
空函數
如果想定義一個什麼也不做的函數,可以用pass語句
def nop():
pass
pass可以用來作爲佔位符,比如現在還沒想好怎麼寫函數的代碼,就可以先放一個pass,讓代碼能運行起來。
pass還可以用在其他語句裏,比如:
if age>=18
pass
如果缺少了pass,代碼運行就會有語法錯誤
默認參數
def power(x,n=2):
s =1
while n >0:
n=n-1
s=s*x
return s
定義默認參數要牢記一點:默認參數必須指向不變對象!
爲什麼要設計str、None這樣的不變對象呢?因爲不變對象一旦創建,對象內部的數據就不能修改,這樣就減少了由於修改數據導致的錯誤。此外,由於對象不變,多任務環境下同時讀取對象不需要加鎖,同時讀一點問題都沒有。我們在編寫程序時,如果可以設計一個不變對象,那就儘量設計成不變對象。
可變參數
def calc(*numbers):
sum =0
for n in numbers:
sum = sum+n*n
return sum
定義可變參數和定義list或者tupl參數相比,僅僅在參數前面加*號,在函數內部,參數numbers接收到的是一個tuple,因此,函數代碼完全不變,但是,調用該函數可以傳入任意個參數,包括0個參數
python允許你在list或者tuple前面加*號,把list或tuple的元素變成可變參數傳進去
關鍵字參數
關鍵字參數允許你傳入0個或者任意個含參數名的參數,這些個關鍵字參數在函數內部自動組裝成一個dict
參數組合:
在Python中定義函數,可以用必選參數、默認參數、可變參數和關鍵字參數,這4種參數都可以一起使用,或者只用其中某些,但是請注意,參數定義的順序必須是:必選參數、默認參數、可變參數和關鍵字參數。
def fun(a,b,c=0,*args,**kw):
print('a=',a,'b=',b,'c=',c,'args=',arg,'kw=',kw)
遞歸函數
def fact(n):
if n==1:
return 1
return x*fact(n-1)
這樣遞歸如果遞歸次數會導致棧溢出
解決遞歸調用棧溢出的方法是通過尾遞歸優化,尾遞歸是指,在函數返回的時候,調用自身本身,並且,return語句不能包含表達式
def fact(n):
return fact_iter(n,1)
def fact_iter(n,product)
if n==1:
return product
return fact_iter(n-1,n*product)