python學習(二) 函式

2021-07-10 16:34:14 字數 2305 閱讀 7578

在python中,定義乙個函式要使用def語句,依次寫出函式名、括號、括號中的引數和冒號:,然後,在縮排塊中編寫函式體,函式的返回值用return語句返回。如果沒有return語句,函式執行完畢後也會返回結果,只是結果為none;return none可以簡寫為return。

如果想定義乙個什麼事也不做的空函式,可以用pass語句:pass語句什麼都不做,那有什麼用?實際上pass可以用來作為佔位符,比如現在還沒想好怎麼寫函式的**,就可以先放乙個pass,讓**能執行起來。

python的函式返回多值其實就是返回乙個tuple,但寫起來更方便。在語法上,返回乙個tuple可以省略括號,而多個變數可以同時接收乙個tuple,按位置賦給對應的值。

定義函式時,需要確定函式名和引數個數;

如果有必要,可以先對引數的資料型別做檢查;

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

函式執行完畢也沒有return語句時,自動return none;

函式可以同時返回多個值,但其實就是乙個tuple。

除了正常定義的必選引數外,還可以使用預設引數、可變引數和關鍵字引數、命名關鍵字引數,使得函式定義出來的介面,不但能處理複雜的引數,還可以簡化呼叫者的**。

1. 預設引數:最大的好處是能降低呼叫函式的難度。設定預設

引數時,有幾點要注意:

必選引數在前,預設引數在後,否則python的直譯器會報錯(思考一下為什麼預設引數不能放在必選引數前面);

如何設定預設引數:當函式有多個引數時,把變化大的引數放前面,變化小的引數放後面。變化小的引數就可以作為預設引數;

有多個預設引數時,呼叫的時候,既可以按順序提供預設引數;也可以不按順序提供部分預設引數。當不按順序提供部分預設引數時,需要把引數名寫上;

定義預設引數要牢記一點:預設引數盡量指向不變物件,避免不必要的***。

2. 可變引數:就是傳入的引數個數是可變的,可以是1個、2個到任意個,還可以是0個。定義可變引數和定義乙個list或tuple引數相比,僅僅在引數前面加了乙個

號,在函式內部,引數接收到的是乙個tuple;可變引數允許你傳入0個或任意個引數,這些可變引數在函式呼叫時自動組裝為乙個tuple;python允許你在list或tuple前面加乙個號,把list或tuple的元素變成可變引數傳進去,注意引數接受到只是它們的乙份拷貝。

3. 關鍵字引數:允許你傳入0個或任意個含引數名的引數,這些關鍵字引數在函式內部自動組裝為乙個dict;python允許你在dict前面加**號,轉化為關鍵字引數,注意引數接受到只是它們的乙份拷貝。

4. 命名關鍵字引數:限制關鍵字引數的名字,和關鍵字引數

*kw不同,命名關鍵字引數需要乙個特殊分隔符,

後面的引數被視為命名關鍵字引數;命名關鍵字引數必須傳入引數名,這和位置引數不同,如果沒有傳入引數名,呼叫將報錯;命名關鍵字引數可以有預設值,從而簡化呼叫;使用命名關鍵字引數時,要特別注意,不是引數,而是特殊分隔符。如果缺少*,python直譯器將無法識別位置引數和命名關鍵字引數.

引數組合

在python中定義函式,可以用必選引數、預設引數、可變引數、關鍵字引數和命名關鍵字引數,這5種引數都可以組合使用,除了可變引數無法和命名關鍵字引數混合。但是請注意,引數定義的順序必須是:必選引數、預設引數、可變引數/命名關鍵字引數和關鍵字引數。如:

function(a,b,c,*args,**kw)

或者 function(a,b,c,*,d,e,**kw)

對於任意函式,都可以通過類似func(*args, **kw)的形式呼叫它,無論它的引數是如何定義的。

python的函式具有非常靈活的引數形態,既可以實現簡單的呼叫,又可以傳入非常複雜的引數。預設引數一定要用不可變物件,如果是可變物件,程式執行時會有邏輯錯誤!

要注意定義可變引數和關鍵字引數的語法:

*args是可變引數,args接收的是乙個tuple;

**kw是關鍵字引數,kw接收的是乙個dict。

使用args和**kw是python的習慣寫法,當然也可以用其他引數名,但最好使用習慣用法。命名的關鍵字引數是為了限制呼叫者可以傳入的引數名,同時可以提供預設值。定義命名的關鍵字引數不要忘了寫分隔符,否則定義的將是位置引數。

在函式內部,可以呼叫其他函式。如果乙個函式在內部呼叫自身本身,這個函式就是遞迴函式。遞迴函式的優點是定義簡單,邏輯清晰。理論上,所有的遞迴函式都可以寫成迴圈的方式,但迴圈的邏輯不如遞迴清晰。使用遞迴函式需要注意防止棧溢位。

在計算機中,函式呼叫是通過棧stack這種資料結構實現的,每當進入乙個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位。

使用遞迴函式的優點是邏輯簡單清晰,缺點是過深的呼叫會導致棧溢位。

Python學習(二) 函式

import math 資料型別檢查 isinstance x,int,float 判斷x的型別是否為int或float型別 定義函式 格式def 引數 注意函式體要縮排 返回用return,如果函式沒有返回執行完成自動返回return none def x,y,z,pass 函式體,為了保持函式完...

python初步學習 python函式 二

python是支援多種范型的語言,可以進行所謂函式式程式設計,其突出體現在有這麼幾個函式 filter map reduce lambda yield g lambda x,y x y x y,並返回結果 g 3,4 7 lambda x x 2 4 返回4的平方 16lambda函式的使用方法 冒...

Python學習筆記(二) 函式

呼叫函式 abs max min hex 整數轉換成十六進製制 資料型別轉換 int float str bool 定義函式 定義乙個函式要使用 def語句,依次寫出函式名 括號 括號中的引數和冒號 然後,在縮排塊中編寫函式體,函式的返回值用 return 語句返回。def my abs x if ...