Python 函式 – 基礎篇
Python 函式基本概念 / 函式呼叫 / 函式回傳值
在本篇文章中,詳細探討了 Python 函式的基礎概念,從基本定義到進階應用,涵蓋了函式的結構、參數傳遞方式、回傳值處理,以及 Lambda 函式的使用,且還透過實例展示了函式在數據分析、API 交互、算法開發等領域的應用,並透過綜合練習加強讀者的實踐技能,希望能夠幫助初學者和有經驗的開發者深入理解 Python 函式的功能。本篇算是一份全面的Python 函式指南,適合所有希望精通 Python 函式的程序猿。
Outline
Python 函式基本概念
定義Python 函式
Python 函式是一段組織好的、可重復使用的代碼,用於執行一個或多個相關的操作。它可以接受輸入參數並返回一個結果。在 Python 中,函式是用 def
關鍵字來定義的。
函式的主要優點是提高代碼的重用性、使代碼更加有組織,並提高可讀性。
Python 函式的結構
一個基本的 Python 函式結構包括以下部分:
- 函式名:標識函式的唯一名稱。
- 參數(可選):函式可以接受的輸入值。
- 函式體:執行特定任務的代碼塊。
- 返回值(可選):函式執行後返回的結果。
以下是一個簡單的函式範例:
1 2 |
def greet(name): return f"Hello, {name}!" |
在這個範例中,greet 是函式名,name 是一個參數,函式體包含了一行代碼,返回一個格式化的字符串。
調用Pythono 函式
定義函式後,我們可以通過其名稱來調用它,並傳入相應的參數(如果有的話)。例如:
1 |
print(greet("Alice")) |
當調用 greet 函式並傳入 “Alice” 作為參數時,它會返回字符串 “Hello, Alice!”。
透過將代碼封裝到函式中,我們可以提高代碼的可重用性和可讀性,並使我們的程序更加模塊化。
在接下來的章節中,將進一步探索函式的不同用法和高級特性,包括參數類型、回傳值以及如何在實際應用中有效地使用函式。
Python 函式定義和使用函式
如何定義Python 函式
函式是用 def
關鍵字在 Python 中定義的。一個函式的基本結構包含函式名、參數列表和函式體。這裡有一個定義函式的範例:
1 2 |
def add_numbers(a, b): return a + b |
在這個例子中,add_numbers 是函式名,a
和 b
是參數,return a + b 是函式體,它返回兩個參數的和。
參數
參數是傳遞給函式的值。它們是在函式呼叫時指定的,並在函式內部用於執行操作或計算。參數是可選的;一個函式可以沒有參數。
返回值
return 語句用於從函式返回一個值。如果函式不需要返回值,return 語句可以省略。在前面的例子中,return a + b 語句返回了兩個參數的和。
如何使用Python 函式
定義函式後,可以通過函式名來調用它,並傳入所需的參數。例如:
1 2 |
result = add_numbers(5, 3) print(result) # 輸出將會是 8 |
這個調用將 5
和 3
作為參數傳遞給 add_numbers 函式,然後打印返回的結果。
範例:計算平均值
讓我們定義一個函式來計算一系列數字的平均值:
1 2 3 4 5 6 7 8 9 10 |
def calculate_average(numbers): sum_of_numbers = sum(numbers) count_of_numbers = len(numbers) average = sum_of_numbers / count_of_numbers return average # 使用函式 nums = [10, 20, 30, 40, 50] avg = calculate_average(nums) print(f"The average is: {avg}") |
這個函式接受一個數字列表作為輸入,計算並返回它們的平均值。
深入Python 函式呼叫
傳遞參數
當呼叫函式時,你可以以不同的方式傳遞參數:
1. 位置參數:這是最常見的方法,其中參數按順序傳遞。
1 2 3 4 |
def subtract(a, b): return a - b result = subtract(10, 5) # a = 10, b = 5 |
2. 關鍵字參數:允許你通過名稱而不是位置來指定參數,增加了代碼的可讀性。
1 |
result = subtract(a=10, b=5) # 明確指定 a 和 b 的值 |
3. 預設參數值:定義函式時,可以為參數指定預設值。
1 2 3 4 |
def greet(name, message="Hello"): return f"{message}, {name}!" greeting = greet("Alice") # message 使用預設值 "Hello" |
可變長度參數
在某些情況下,你可能希望函式能處理不定數量的參數:
1. 星號(*):用於收集多餘的位置參數。
1 2 3 4 |
def sum_all(*args): return sum(args) total = sum_all(1, 2, 3, 4) # args 會是一個包含所有參數的元組 |
3. 雙星號()**:用於收集關鍵字參數。
1 2 3 4 5 |
def config(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") config(database="MySQL", user="root", password="123456") |
函式作為參數
Python 中的函式可以作為參數傳遞給其他函式。這提供了極大的靈活性。
1 2 3 4 5 6 7 |
def apply_function(func, value): return func(value) def double(x): return x * 2 result = apply_function(double, 5) # result 為 10 |
匿名函式(Lambda 函式)
Lambda 函式提供了一種快速定義單行函式的方法。
1 2 |
multiply = lambda x, y: x * y print(multiply(2, 3)) # 輸出 6 |
透過瞭解這些不同的函式呼叫方法和特性,能夠更靈活地使用 Python 來編寫清晰、高效且易於維護的代碼。在後續章節中,我們將探討更高級的函式特性,如遞迴、高階函式和閉包。
Python 函式回傳值的概念和應用
什麼是回傳值?
Python 函式的回傳值是函式執行後返回給呼叫者的數據。它是函式處理過的結果,可以是任何數據類型:數字、字符串、列表、元組,甚至是其他函式或物件。
使用 return 語句
在 Python 中,return 語句用於指定函式的回傳值。當函式執行到 return 語句時,函式會結束,並將 return 後的值返回給呼叫者。
1 2 3 4 5 6 7 8 |
def get_max(a, b): if a > b: return a else: return b max_value = get_max(10, 20) print(max_value) # 輸出 20 |
在這個例子中,get_max 函式返回兩個參數中的最大值。
沒有回傳值
如果函式沒有 return 語句,或者 return 後面沒有跟隨任何值,則函式返回 None。
1 2 3 4 5 |
def print_message(message): print(message) result = print_message("Hello, Python!") print(result) # 輸出 None |
多個回傳值
Python 允許函式返回多個值,這些值通常以元組的形式返回。
1 2 3 4 5 |
def get_stats(numbers): return max(numbers), min(numbers), sum(numbers) / len(numbers) max_val, min_val, average = get_stats([1, 2, 3, 4, 5]) print(f"Max: {max_val}, Min: {min_val}, Average: {average}") |
Python 函式的實際應用
數據處理
函式在數據處理和分析中扮演著重要角色。例如,我們可以寫一個函式來清理或轉換數據:
1 2 3 4 5 6 7 8 9 10 11 12 |
def clean_data(data): # 假設 data 是一個字典列表 cleaned_data = [] for item in data: cleaned_item = {k: v.strip() if isinstance(v, str) else v for k, v in item.items()} cleaned_data.append(cleaned_item) return cleaned_data # 使用函式 raw_data = [{'name': ' Alice ', 'age': 30}, {'name': ' Bob ', 'age': 25}] processed_data = clean_data(raw_data) print(processed_data) |
在這個例子中,clean_data 函式去除數據中的領先和尾隨空格。
API 交互
函式可以用於處理與外部 API 的交互,如從網絡服務獲取數據或發送數據:
1 2 3 4 5 6 7 8 9 10 |
import requests def fetch_weather_data(city): url = f"https://api.weatherapi.com/v1/current.json?key=YOUR_API_KEY&q={city}" response = requests.get(url) return response.json() # 使用函式 weather_data = fetch_weather_data('Taipei') print(weather_data) |
這個函式 fetch_weather_data 向天氣 API 發送請求並返回結果。
算法實現
函式是實現和測試算法的理想方式。例如,我們可以用一個函式來實現排序算法:
1 2 3 4 5 6 7 8 9 10 11 12 |
def bubble_sort(arr): n = len(arr) for i in range(n): for j in range(0, n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] return arr # 使用函式 unsorted_array = [64, 34, 25, 12, 22, 11, 90] sorted_array = bubble_sort(unsorted_array) print(sorted_array) |
GUI 應用
在圖形用戶界面(GUI)應用程序中,函式可用於響應用戶交互,例如按鈕點擊:
1 2 3 4 5 6 7 8 9 10 11 |
import tkinter as tk def on_button_click(): label.config(text="Hello, Python!") app = tk.Tk() button = tk.Button(app, text="Click me", command=on_button_click) button.pack() label = tk.Label(app) label.pack() app.mainloop() |
在這個範例中,當按鈕被點擊時,on_button_click 函式會被呼叫。
Python 函式的應用範圍非常廣泛,從數據處理和 API 交互到算法實現和 GUI 開發。
綜合練習
練習一:數據分析函式
寫一個函式 analyze_data,接受一個數字列表作為參數,返回這個列表的最大值、最小值和平均值。
1 2 3 4 5 6 7 8 9 10 |
def analyze_data(numbers): max_val = max(numbers) min_val = min(numbers) average = sum(numbers) / len(numbers) return max_val, min_val, average # 測試函式 data = [10, 20, 30, 40, 50] max_val, min_val, avg = analyze_data(data) print(f"Max: {max_val}, Min: {min_val}, Average: {avg}") |
練習二:字串處理函式
建立一個函式 format_string,它接受一個字串和一個整數 width。這個函式應該返回一個新的字串,長度為 width,原字串居中,兩側用 ‘-‘ 填充。
1 2 3 4 5 6 |
def format_string(string, width): return string.center(width, '-') # 測試函式 formatted_string = format_string("Hello", 20) print(formatted_string) # 輸出: "-------Hello--------" |
練習三:函式作為參數
寫一個函式 process_data,它接受一個數字列表和一個函式作為參數。這個函式應該應用傳入的函式到列表的每一個元素上,並返回結果列表。
1 2 3 4 5 6 7 |
def process_data(numbers, func): return [func(num) for num in numbers] # 測試函式 data = [1, 2, 3, 4, 5] processed_data = process_data(data, lambda x: x * x) print(processed_data) # 輸出: [1, 4, 9, 16, 25] |
練習四:錯誤處理
改進 analyze_data 函式,增加錯誤處理來處理空列表的情況。
1 2 3 4 5 6 7 8 9 10 11 12 |
def analyze_data(numbers): if not numbers: return None, None, None max_val = max(numbers) min_val = min(numbers) average = sum(numbers) / len(numbers) return max_val, min_val, average # 測試函式 empty_data = [] max_val, min_val, avg = analyze_data(empty_data) print(f"Max: {max_val}, Min: {min_val}, Average: {avg}") # 輸出: Max: None, Min: None, Average: None |
以上是Python 函數學習筆記。