Python函數(函數定義、函數調用)用法詳解


Python 中,函數的應用非常廣泛,前面章節中我們已經接觸過多個函數,比如 input() 、print()、range()、len() 函數等等,這些都是 Python 的內置函數,可以直接使用。

除了可以直接使用的內置函數外,Python 還支持自定義函數,即將一段有規律的、可重復使用的代碼定義成函數,從而達到一次編寫、多次調用的目的。

比如,在程序中定義了一段代碼,這段代碼用於實現一個特定的功能。問題來了,如果下次需要實現同樣的功能,難道要把前面定義的代碼復制一次?如果這樣做實在太傻了,這意味着每次當程序需要實現該功能時,都要將前面定義的代碼復制一次。正確的做法是,將實現特定功能的代碼定義成一個函數,每次當程序需要實現該功能時,只要執行(調用)該函數即可。

通俗來講,所謂函數,就是指為一段實現特定功能的代碼“取”一個名字,以后即可通過該名字來執行(調用)該函數。使用函數,可以大大提高代碼的重復利用率。

通常,函數可以接收零個或多個參數,也可以返回零個或多個值。從函數使用者的角度來看,函數就像一個“黑匣子”,程序將零個或多個參數傳入這個“黑匣子”,該“黑匣子”經過一番計算即可返回零個或多個值。

對於“黑匣子”的內部細節(就是函數的內部實現細節),函數的使用者並不需要關心。就像前面在調用 len()、max()、min() 等函數時,我們只負責傳入參數、接收返回值,至於函數內部的實現細節,我們並不關心。

如圖 1 所示為函數調用示意圖:



圖 1 函數調用示意圖


從函數定義者(實現函數的人)的角度來看,其至少需要想清楚以下 3 點:

  1. 函數需要幾個關鍵的需要動態變化的數據,這些數據應該被定義成函數的參數。
  2. 函數需要傳出幾個重要的數據(就是調用該函數的人希望得到的數據),這些數據應該被定義成返回值。
  3. 函數的內部實現過程。

不難看出,定義函數比調用函數要難得多,而本節正是教你如何定義函數的。不過不用擔心,對於實現過程復雜的函數,定義本身就很費力,有時候實現不出來也完全正常。

Python函數的定義

定義函數,也就是創建一個函數,可以理解為創建一個具有某些用途的工具。定義函數需要用 def 關鍵字實現,具體的語法格式如下:

def 函數名(形參列表):
    //由零條到多條可執行語句組成的代碼塊
    [return [返回值]]

其中,用 [] 括起來的為可選擇部分,即可以使用,也可以省略。

此格式中,各部分參數的含義如下:

    • 函數名:從語法角度來看,函數名只要是一個合法的標識符即可;從程序的可讀性角度來看,函數名應該由一個或多個有意義的單詞連綴而成,每個單詞的字母全部小寫,單詞與單詞之間使用下畫線分隔。
    • 形參列表:用於定義該函數可以接收的參數。形參列表由多個形參名組成,多個形參名之間以英文逗號(,)隔開。一旦在定義函數時指定了形參列表,調用該函數時就必須傳入相應的參數值,也就是說,誰調用函數誰負責為形參賦值。
    • 注意,在創建函數時,即使函數不需要參數,也必須保留一對空的“()”,否則 Python 解釋器將提示“invaild syntax”錯誤。另外,如果想定義一個沒有任何功能的空函數,可以使用 pass 語句作為占位符。
    • 下面程序定義了兩個函數:
      1. def my_max(x, y) :
      2. # 定義一個變量z,該變量等於x、y中較大的值
      3. z = x if x > y else y
      4. # 返回變量z的值
      5. return z
      6. # 定義一個函數,聲明一個形參
      7. def say_hi(name) :
      8. print("===正在執行say_hi()函數===")
      9. return name + ",您好!"

      Python函數的調用

      調用函數也就是執行函數。如果把創建的函數理解為一個具有某種用途的工具,那么調用函數就相當於使用該工具。

      函數調用的基本語法格式如下所示:

      函數名([形參值])

      其中,函數名即指的是要調用的函數的名稱;形參值指的是當初創建函數時要求傳入的各個形參的值。需要注意的是,創建函數有多少個形參,那么調用時就需要傳入多少個值,且順序必須和創建函數時一致。即便該函數沒有參數,函數名后的小括號也不能省略。

      例如,調用前面創建的那 2 個函數,執行代碼如下:
      1. a = 6
      2. b = 9
      3. # 調用my_max()函數,將函數返回值賦值給result變量
      4. result = my_max(a , b) # ①
      5. print("result:", result)
      6. # 調用say_hi()函數,直接輸出函數的返回值
      7. print(say_hi("孫悟空")) # ②
      上面程序中,分別在 ① 號、② 號代碼處調用了 my_max() 和 say_hi() 這兩個函數。從下面的運行結果可以看出,當程序調用一個函數時,既可以把調用函數的返回值賦值給指定變量,也可以將函數的返回值傳給另一個函數,作為另一個函數的參數。

      運行上面程序,將可以看到如下運行結果:

      result: 9
      ===正在執行say_hi()函數===
      孫悟空,您好!

      另外,在函數體中使用 return 語句可以顯式地返回一個值,return 語句返回的值既可是有值的變量,也可是一個表達式。例如上面的 my_max() 函數,實際上也可簡寫為如下形式:
      1. def my_max(x, y) :
      2. # 返回一個表達式
      3. return x if x > y else y

      為函數提供說明文檔

      前面介紹過可以使用 Python 內置的 help() 函數查看其他函數的幫助文檔,我們也經常通過 help() 函數查看指定函數的幫助信息,這對於 Python 開發者來說非常重要。

      我們還可以為函數編寫說明文檔,只要把一段字符串放在函數聲明之后、函數體之前,這段字符串將被作為函數的部分,這個文檔就是函數的說明文檔。

      程序既可通過 help() 函數查看函數的說明文檔,也可通過函數的 __doc__ 屬性訪問函數的說明文檔。下面程序示范了為函數編寫說明文檔:
      1. def my_max(x, y) :
      2. '''
      3. 獲取兩個數值之間較大數的函數。
      4. my_max(x, y)
      5. 返回x、y兩個參數之間較大的那個
      6. '''
      7. # 定義一個變量z,該變量等於x、y中較大的值
      8. z = x if x > y else y
      9. # 返回變量z的值
      10. return z
      上面程序使用多行字符串的語法為 my_max() 函數編寫了說明文檔,接下來程序既可通過 help() 函數查看該函數的說明文檔,也可通過 __doc__ 屬性訪問該函數的說明文檔。
      1. # 使用help()函數查看my_max的幫助文檔
      2. help(my_max)
      3. #或者 print(my_max.__doc__)
      運行上面代碼,可以看到如下運行結果:

      Help on function my_max in module __main__:

      my_max(x, y)
          獲取兩個數值之間較大數的函數。
         
          my_max(x, y)
              返回x、y兩個參數之間較大的那個。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM