《從零開始的 Python 筆記》 Jour # 4: 模組化三劍客 – 函數 , 模組 , 與套件 | par Ethan Chen | Août 2025

 《從零開始的 Python 筆記》 Jour # 4: 模組化三劍客 – 函數 , 模組 , 與套件 | par Ethan Chen | Août 2025


Appuyez sur Entrée ou cliquez pour afficher l’image en taille réelle

學完 Python 的基礎課程後 , 大家對於 Python 已經有了一定程度的了解 , 可以開始踏入 Python 進階的課程了! 這邊將介紹 Python 中的函數、模組與套件 , 這些技巧可以提升結構化、模組化程式的能力 , 讓程式碼更易於維護、重用與 共 享。

函數是一組具有特定功能的代碼片段 , 使用函數可以避免重複代碼 , 提高程式的可讀性與可重用性。

基礎語法

def 函數名稱(參數1, 參數2, ...):
"""函數的說明文件字串 (選填)"""
# 函數邏輯
return 結果 (選填)

基礎函數

def greet():
print("Hello, Python!")

# 呼叫函數
greet()

# 輸出
Hello, Python!

帶參數和返回值

# 定義函數
def add_numbers(a, b):
return a + b

# 呼叫函數
result = add_numbers(10, 5)
print(f"The result of addition is: {result}")

# 輸出
The result of addition is: 15

函數的參數

  • 位置參數 : 按順序傳遞值。
  • 關鍵字參數 : 指定參數名稱來傳遞值。
  • 預設參數 : 為參數設定預設值。
  • 可變參數 : 接受不定數量的參數。
def introduce(name, age=18, *hobbies):
print(f"My name is {name} and I am {age} years old.")
if hobbies:
print(f"My hobbies are: {', '.join(hobbies)}")

introduce("Alice", 25, "reading", "traveling", "coding")
introduce("Bob")

# 輸出
My name is Alice and I am 25 years old.
My hobbies are: reading, traveling, coding
My name is Bob and I am 18 years old.

高階函數

高階函數是以函數作為參數或返回值的函數。python 提供了多種高階函數 , 例如 mapapply, 結合 匿名函數 lambda 可以實現清晰且高效的數據處理功能。

lambda

  • lambda 是 Python 提供的匿名函數語法 , 用於創建臨時函數。
  • lambda 参数: 表達式

  • – 只能寫單行表達式。
    – 沒有函數名稱 , 通常用於簡單邏輯。
def add(x, y):
return x + y

# 使用 lambda 替換
add_lambda = lambda x, y: x + y

print(add(5, 3)) # 8
print(add_lambda(5, 3)) # 8

map

  • map (func, itérable) 是一個內建高階函數 , 將 func 函數應用到 itérable 的每個元素 , 並返回一個 迭代器
  • 不會直接返回列表 , 而是返回一個映射對象 , 需要用 list () 或 pour 轉換。
  • 適合處理數據的批量轉換。
  • 在 Pandas 中適用於 Series 資料格式的處理 (單列 / 單欄)
numbers = (1, 2, 3, 4)
result = map(lambda x: x ** 2, numbers)

print(list(result)) # (1, 4, 9, 16)

apply

  • Appliquer 是 Pandas 中的一個方法 , 用於將函數應用到資料框的列或行
  • 用於 pandas 列 (série) 或 整張表格 (dataframe) 的批量數據處理。
  • 適合處理更複雜的數據轉換場景。
import pandas as pd

# 建立數據框
data = {"Name": ("Alice", "Bob", "Charlie"),
"Age": (25, 30, 35),
"Salary": (50000, 60000, 70000)}
df = pd.DataFrame(data)

# 將年齡提升 10%
df("Age * 1.1") = df("Age").apply(lambda x: x * 1.1)
print(df)

# 輸出
Name Age Salary Age * 1.1
0 Alice 25 50000 27.5
1 Bob 30 60000 33.0
2 Charlie 35 70000 38.5

函數作為參數

def apply_function(data, func):
return (func(x) for x in data)

# 測試
numbers = (1, 2, 3, 4)
squared = apply_function(numbers, lambda x: x ** 2)
print(squared)

# 輸出
(1, 4, 9, 16)

比較

Appuyez sur Entrée ou cliquez pour afficher l’image en taille réelle

遞迴函數

遞迴函數是一個函數直接或間接地調用其自身 , 常用於解決樹結構、階層關係或數列問題。其運算邏輯與效率常常與 pour 迴圈做比較 , 屬於演算法中的一種。

  • 直觀且數學風格 : 遞迴函數與階層的數學定義非常接近 , 公式簡單明瞭。
  • 簡潔性 : 在許多情況下 , 對遞迴算法的理解更直觀 , 代碼量少。

  • 計算效率 : 遞迴每一次呼叫都需要佔用額外的函數記憶體空間 , 對於較大的數值 (如 100!) 可能會導致記憶體不足或觸發 Recursionerror。
  • 限制: Python 遞迴的深度有限 (默認為約 1000 層) , 如果數字 n 太大 , 會因為超出遞迴深度限制而失敗。
# 遞迴版本
def factorial(n):
if n == 0: # 基底條件
return 1
else:
return n * factorial(n - 1) # 遞迴條件

# for迴圈版本
def factorial(n):
result = 1 # 初始值設為 1,因為 0! = 1
for i in range(1, n + 1): # 從 1 到 n(含 n)
result *= i # 將 i 乘入結果中
return result

# 測試
print(factorial(5)) # 120

Appuyez sur Entrée ou cliquez pour afficher l’image en taille réelle



Source link

Related post