python菜鳥教程學習9:函式

奎恩東特發表於2020-11-26

函式的定義

  函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的程式碼段。python提供了很多內建函式,但我們依然可以自己建立函式,叫做使用者自定義函式。

自定義函式

  你可以定義一個由自己想要功能的函式,以下是簡單的規則:

  • 函式程式碼塊以 def 關鍵詞開頭,後接函式識別符號名稱和圓括號 ()
  • 任何傳入引數和自變數必須放在圓括號中間,圓括號之間可以用於定義引數。
  • 函式的第一行語句可以選擇性地使用文件字串—用於存放函式說明。
  • 函式內容以冒號 : 起始,並且縮排。
  • return [表示式] 結束函式,選擇性地返回一個值給呼叫方,不帶表示式的 return 相當於返回 None。
def 函式名(引數列表):
    函式體

函式呼叫

  函式的基本結構完成以後,你可以通過另一個函式呼叫執行,也可以直接從 Python 命令提示符執行。

引數傳遞

  在 python 中,型別屬於物件,變數是沒有型別的,變數沒有型別,她僅僅是一個物件的引用(一個指標),可以是指向 List 型別物件,也可以是指向 String 型別物件。

可更改(mutable)與不可更改(immutable)物件

  • 在python中,不可變型別string,tuple,number是不可更改的物件對於同一個標籤名字的賦值,實際上是生成一個新的值物件,再讓變數指向這個物件。而可變物件list,dict等則是將元素值更改本身並沒有動。
  • 對於python中的函式的引數傳遞,不可變型別,傳遞的只是一個變數的值,並內有影響物件本身,但是如果是傳遞可變型別那就是實現了值傳遞,是真正的傳過去。

引數

  必需就是啥也沒有,關鍵字就是標識哪個對應哪個,預設就是有預設值

  • 必需引數:以正確的順序傳入函式,呼叫時的數量必須和宣告時的一樣。
  • 關鍵字引數:函式呼叫使用關鍵字引數來確定傳入的引數值,使用關鍵字引數允許函式呼叫時引數的順序與宣告時不一致,因為直譯器能夠用引數名匹配引數值。
  • 預設引數:呼叫函式時如果沒有傳遞引數則會使用預設引數
  • 不定長引數:有時候函式需要能處理比宣告時更多的引數,這些引數叫做不定長引數
    • 加了星號 * 的引數會以元組(tuple)的形式匯入,存放所有未命名的變數引數。
def functionname([formal_args,] *var_args_tuple ):
   "函式_文件字串"
   function_suite
   return [expression]
    • 還有一種就是引數帶兩個星號 **,加了兩個星號 ** 的引數會以字典的形式匯入,基本語法如下:
def functionname([formal_args,] **var_args_dict ):
   "函式_文件字串"
   function_suite
   return [expression]
    • 宣告函式時,引數中星號 * 可以單獨出現,如果單獨出現星號 * 後的引數必須用關鍵字傳入。

匿名函式

  python 使用 lambda 來建立匿名函式。所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函式。

  • lambda 只是一個表示式,函式體比 def 簡單很多。
  • lambda的主體是一個表示式,而不是一個程式碼塊。僅僅能在lambda表示式中封裝有限的邏輯進去。
  • lambda 函式擁有自己的名稱空間,且不能訪問自己引數列表之外或全域性名稱空間裡的引數。
  • 雖然lambda函式看起來只能寫一行,卻不等同於C或C++的行內函數,後者的目的是呼叫小函式時不佔用棧記憶體從而增加執行效率。

Return語句

  return用於退出函式,選擇性的呼叫方法返回一個表示式,不帶引數值的return返回None。

強制位置引數

  Python3.8 新增了一個函式形參語法 / 用來指明函式形參必須使用指定位置引數,不能使用關鍵字引數的形式。

  在以下的例子中,形參 a 和 b 必須使用指定位置引數,c 或 d 可以是位置形參或關鍵字形參,而 e 或 f 要求為關鍵字形參:

def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)

 

相關文章