Python 函式

Jinku Hu 2023年1月30日 2018年2月13日
  1. 什麼是 Python 函式
  2. 如何來定義 Python 函式
  3. Python 函式示例
  4. Python 中函式的呼叫
  5. return 語句
  6. Python 變數的作用範圍和生命週期
  7. 函式型別
Python 函式

以下是這一節中,我們要來介紹的關於 Python 函式的知識點:

  • 什麼是函式
  • 如何來建立函式
  • 函式的型別

什麼是 Python 函式

函式是一小塊程式,它包含許多執行特定任務的單行或多行語句。假如說你有一個數千行執行不同任務的程式碼,那麼你應該將程式劃分為小模組(塊),也就是將它們切割為不同的函式,這樣可以提高程式碼的可讀性並降低其複雜度。

如何來定義 Python 函式

以下是 Python 的定義函式的語法:

def functionName(arguments):
    """This is the definition of this function"""
    statements
    return returnParam
  1. 關鍵字 def 用於定義宣告函式。
  2. functionName 是函式的名稱。
  3. arguments 是可選的,它引數提供了用於執行操作的輸入值。
  4. 冒號(:)放在函式頭的結尾。
  5. """This is the definition of this function""" 是一個函式文件說明,它是可選項,用來描述該函式的功能。
  6. statements 是函式主體,包括一行或多行程式碼。
  7. return 也是可選項,它將結果返回給該函式的呼叫者。

Python 函式示例

def language(p):
    """Function to print a message"""
    print("Programming language:", p)

這裡 language 定義了一個函式,它有一個從呼叫者傳遞的引數 p。在函式內部,有一個 docstring-函式文件說明和一個 print 語句來列印含有引數 p 的資訊。

Python 中函式的呼叫

你可以從程式中的任何位置來呼叫已定義的函式,可以通過使用函式名稱以及所需輸入引數來呼叫該函式。

language('Python')
Programming language: Python

return 語句

return 語句將控制權轉移回撥用該函式的程式碼,它表示了函式定義在此結束。

return 的語法如下:

return [values_to_be_returned]

如果函式中沒有 return 語句,則預設返回一個 None 物件。

return 語句示例

def square(n):
    return n*n
print("Square of 4=", square(4))
Square of 4=16

在此程式碼中,square(n) 函式在 print 函式中被呼叫,4 作為輸入引數被傳遞進去。在函式內部,有一個計算的達式-n*n,計算的結果返回到呼叫函式的位置(print 語句)。

Python 變數的作用範圍和生命週期

變數的作用範圍是該變數能被訪問的有效範圍。當在函式內部宣告變數時,在函式的外部無法訪問它,這種型別的變數稱為區域性變數,只能在宣告它的函式內被訪問到。

變數的生命週期是變數存在於記憶體中的時間。當在函式內宣告變數時,當函式控制流程跳出該函式時,它的記憶體將被釋放。

如以下示例:

def fun():
    a = 12
    print("Value of a inside function:", a)
a = 24
fun()
print("Value of a outside function:", a)
Value of a inside function: 12
Value of a outside function: 24

在這段程式碼中,在函式內部的變數 a 和函式外部的變數 a 是不同的變數。

如果你嘗試從外部訪問函式內部宣告的變數,你將遇到錯誤 - NameError name 'x' is not defined。但是在函式外部宣告的變數具有全域性範圍,可以從內部訪問。

函式型別

Python 中的函式可以分為兩種型別:

  1. 內建函式:預先定義的函式,用以執行特定任務。
  2. 自定義函式:由使用者來定義,包含任意數量的語句,用來以執行使用者定義的任務。
Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn