Python入門基礎之函數(三)

通過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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章