4、python 函數

函數的概念在各種語言中都有提及且應用廣泛。

簡單來說,函數,就是一組可以實現某個或者多種功能的代碼,通過函數名組織起來,可以通過調用函數名來重複使用。

python中函數有內建函數和用戶自定義的函數,函數的定義:

一、函數的參數

函數在創建的時候可以設置不同的參數,調用的時候也需要根據參數的類型傳入參數,分爲形參和實參:

形參:

形參變量只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。因此,形參只在函數內部有效。

實參:

實參可以是常量、變量、表達式、函數等,無論實參是何種類型的量,在進行函數調用時,它們都必須有確定的值,以便把這些值傳送給形參。函數調用結束返回主調用函數後則不能再使用該形參變量。

參數類型:

1、必填參數,位置參數

2、關鍵字參數和函數調用關係緊密,函數調用使用關鍵字參數來確定傳入的參數值。傳參的時候必須得用k=v這樣子來傳

使用關鍵字參數允許函數調用時參數的順序與聲明時不一致,因爲 Python 解釋器能夠用參數名匹配參數值。

3、默認值參數,非必傳
4、可變參數,非必傳,不限制參數個數: 比如說給多個人發郵件,發郵件的人數不確定
            關鍵字參數,非必傳,不限制參數個數
            會把傳過來的關鍵字參數,放到一個字典裏面

1、必填參數/位置參數

必需參數須以正確的順序傳入函數。調用時的數量必須和聲明時的一樣。如果順序記不清楚,可以通過關鍵字參數(後續)來傳參數

2、關鍵字參數

3、默認參數

默認參數,就是在定義函數的時候,在參數列表中的一個參數賦一個默認值,如果在調用參數的時候沒有傳入這個參數,就使用默認值

默認參數不是必填的,如果給默認參數傳值的話,它就會使用你傳入的值。如果使用默認值參數的話,必須放在位置參數後面定義

4、可變參數

可變參數用*來接收,後面想傳多少個參數就傳多少個,如果位置參數、默認值參數、可變參數一起使用的的話,可變參數必須在位置參數和默認值參數後面。可變參數也是非必傳的。

加了星號 * 的參數會以元組(tuple)的形式導入,存放所有未命名的變量參數。

還有一種就是參數帶兩個星號 **,加了兩個星號 ** 的參數會以字典的形式導入。

二、函數的返回值

每一個函數都有返回值,

函數體內部可以用return隨時返回函數結果;

函數執行完畢也沒有return語句時,自動return None

如果有多個返回值,會把返回值都放到一個元組中,實際返回的是一個元組tuple。

三、全局變量和局部變量

Python 中,程序的變量並不是在哪個位置都可以訪問的,訪問權限決定於這個變量是在哪裏賦值的。

變量的作用域決定了在哪一部分程序可以訪問哪個特定的變量名稱。Python的作用域一共有4種,分別是:

  • L (Local) 局部作用域
  • E (Enclosing) 閉包函數外的函數中
  • G (Global) 全局作用域
  • B (Built-in) 內建作用域

以 L –> E –> G –>B 的規則查找,即:在局部找不到,便會去局部外的局部找(例如閉包),再找不到就會去全局找,再者去內建中找。

四、遞歸

一個函數在函數內部調用本身,這樣就是遞歸

遞歸調用的特性:

1. 必須有一個明確的結束條件

2. 每次進入更深一層遞歸時,問題規模相比上次遞歸都應有所減少

3. 遞歸效率不高,遞歸層次過多會導致棧溢出(在計算機中,函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞歸調用的次數過多,會導致棧溢出)(from 牛牛)

五、深拷貝和淺拷貝

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章