Python學習筆記(五)函數和代碼複用

  函數能提升應用的模塊性,和代碼的重複利用率。在不少高級語言中,均可以使用函數實現多種功能。在以前的學習中,相信你已經知道Python提供了許多內建函數,好比print()。一樣,你也能夠本身建立函數,這被叫作用戶自定義函數,來實現定製的功能。編程

1、函數的基本使用

1.函數的定義

  函數是一段具備特定功能的、可重用的語句組,用函數名來表示並經過函數名進行功能調用。模塊化

  函數可以完成特定功能,與黑盒相似,對函數的實用不須要了解函數內部實現原理,只要瞭解函數的的輸入和輸出方式便可。因此說,函數是一種功能抽象。函數式編程

使用函數有兩個目的:下降編程難度和代碼重用。因此在編程中的複雜功能可使用函數實現。函數

其中,Python使用 def 保留字定義了一個函數,語法以下:學習

  def <函數名> (<參數列表>):spa

    <函數體>設計

    return <返回值列表>
注:當參數類表中有多個參數,默認狀況下,參數值和參數名稱是按函數聲明中定義的順序匹配起來的。code

2.函數的調用過程

程序調用一個函數需執行一下4個步驟:對象

  (1)調用程序在調用處暫停執行。blog

  (2)在調用時將實參複製給函數的形參。

  (3)執行函數體語句。

  (4)函數調用結束給出返回值,程序回到調用前的暫停處繼續執行。

 

  從函數的調用過程當中,人們引伸出了函數式編程這個概念。函數式編程是一種編程範式,常見的編程範式還包括命令式編程和麪向對象編程等。函數編程的主要思想是把程序過程經過使用一系列函數可以使代碼編寫更簡潔、更易於理解,是中小規模軟件項目中最多見的一種編程方式。

2、函數的參數傳遞

1.可選參數和可變數量參數、

可選參數  

  在定義函數時,若是有些參數存在默認值,即部分函數不必定須要調用程序輸入,能夠在定義函數時直接爲這些參數指定默認值。當函數被調用時,若是沒有傳入對應的參數值,則使用函數定義時的默認值替代。例如:

  使用默認參數:

def printf(str, times = 3): print(str * times)
>>>printf("hello")
hello
hello
hello

  輸入參數

def printf(str, times = 3): print(str * times) >>>printf("hello",2)
hello
hello

 

可變量參數  

  在函數定義時,也能夠設計可變量參數,經過在參數前增長星號(*)實現。帶有星號的可變參數只能出如今參數列表的最後。調用時,這些參數被看成元組類型傳遞到函數中。

例如:

def printf(times,*b): print(b*times) printf(2,1,2,3) >>>(1, 2, 3, 1, 2, 3)

2.參數的位置和名稱傳遞

   Python中提供了按照形參名稱輸入實參的方式,例如

  return =  fuc(x1=2, x2=5, x3=8)      #其中參數由函數 fuc 決定

因爲調用函數時指定了參數名稱,因此參數之間的順序能夠任意調整。

3.函數的返回值

  return語句用來退出函數並將程序返回被調用的位置繼續執行。

  同時,函數能夠沒有return,此時函數並不返回值。函數也能夠用return返回多個值,多個值以元組類型保存。

4.函數對變量的做用

  一個程序中的變量包括兩類:全局變量和局部變量。全局變量指在函數以外定義的變量,通常沒有縮進,在程序執行全過程有效。局部變量指在函數內部使用的變量,僅在函數內部有效,當函數退出時變量將不存在。

其中Python函數對變量的做用遵照以下原則:

(1)簡單數據類型變量不管是否與全局變量重名,僅在函數內部建立和使用,函數退出後變量被釋放,若有全局同名變量,其值不變。

(2)簡單數據類型變量在用 global 保留字聲明後,做爲全局變量使用,函數退出後該變量保留且值被函數改變。

(3)對於組合數據類型的全局變量,若是在函數內部沒有被真實建立的同名變量,則函數內部可使用並修改全局變量的值。

(4)若是函數內部真實建立了組合數據類型變量,不管是否有同名全局變量,函數僅對局部變量進行操做,函數退出後局部變量被釋放,全局變量值不變。

3、代碼複用和模塊化設計

  函數是程序的一種抽象,它經過封裝實現代碼複用。能夠利用函數對程序進行模塊化設計。

  程序由一系列代碼組成,若是代碼是順序但無組織的,不只不利於閱讀和理解,也很難進行維護和升級。所以,把代碼當成資源的抽象,造成易於理解的結構。

函數是程序的一種基本抽象方式,它將一系列代碼組織起來經過命名供其餘程序使用。函數封裝的直接好處是代碼複用,任何其餘代碼只要輸入參數便可調用函數,從而避免相同代碼在被調用處重複編寫。代碼複用產生了另外一個好處,當更新函數時,全部被調用處的功能都能被更新。

模塊化設計指經過函數或對象的封裝功能將程序劃分紅主程序、子程序和子程序間關係的表達。模塊化設計是使用函數和對象設計程序的思考方法,以功能塊爲基本單位,通常有如下兩個基本要求:

  (1)緊耦合:儘量合理劃分功能塊,功能塊內部耦合緊密。

  (2)鬆耦合:模塊間關係儘量簡單,功能塊之間耦合度低。

歸納來講,就是模塊內部緊耦合、模塊之間鬆耦合

4、函數的遞歸

1.遞歸的定義

  函數做爲一種代碼封裝,能夠被其餘程序調用,固然,也能夠被函數內部代碼調用。這種函數定義中調用函數自身的方式稱爲遞歸

遞歸的兩個關鍵特徵:

(1)存在一個或多個基例(問題的最小規模下的解),基例不須要再次遞歸,它是肯定的表達式。

(2)全部遞歸要以一個或多個基例結尾。

2.遞歸的使用方法

實例:階乘的計算。

def fact(n): if n == 0: return 1
    else: return n * fact(n-1) n=eval(print()) print(fact(abs(int(n))))

輸入:

>>>10
26288800
相關文章
相關標籤/搜索