目錄
- 函數簡介
- 基本函數語法
- 函數參數
- 返回值
- 高級函數概念
- 列表推導式與Lambda函數
- 實用示例
函數簡介
函數是可重用的代碼塊,用于執行特定任務。它們有助于組織代碼,促進復用,并使程序更易于維護。可以將函數視為程序中的小型程序。
基本函數語法
在Python中定義函數的基本語法如下:
def function_name(parameters):# 函數體# 要執行的代碼return value # 可選
示例:
def greet(name):return f"Hello, {name}!"# 調用函數
message = greet("Alice")
print(message) # 輸出: Hello, Alice!
函數參數
默認參數
def greet(name, greeting="Hello"):return f"{greeting}, {name}!"print(greet("Bob")) # 輸出: Hello, Bob!
print(greet("Bob", "Hi")) # 輸出: Hi, Bob!
位置參數與關鍵字參數
def create_profile(name, age, occupation):return f"Name: {name}, Age: {age}, Occupation: {occupation}"# 使用位置參數
print(create_profile("Alice", 30, "Engineer"))# 使用關鍵字參數
print(create_profile(age=30, name="Alice", occupation="Engineer"))
*args 和 **kwargs
def print_all(*args, **kwargs):# 打印位置參數for arg in args:print(f"位置參數: {arg}")# 打印關鍵字參數for key, value in kwargs.items():print(f"關鍵字參數: {key} = {value}")print_all(1, 2, 3, name="Alice", job="Developer")
返回值
函數可以返回單個值、多個值,或什么都不返回(默認返回None)。
# 多個返回值
def get_coordinates():x = 10y = 20return x, y# 返回值為元組
gx_coord, y_coord = get_coordinates()
print(f"X: {x_coord}, Y: {y_coord}")# 提前返回
def check_number(n):if n < 0:return "負數"elif n > 0:return "正數"return "零"
高級函數概念
嵌套函數
def outer_function(x):def inner_function(y):return x + yreturn inner_function# 創建閉包
add_five = outer_function(5)
print(add_five(3)) # 輸出: 8
裝飾器
def timer_decorator(func):from time import timedef wrapper(*args, **kwargs):start = time()result = func(*args, **kwargs)end = time()print(f"函數 {func.__name__} 用時 {end - start:.2f} 秒")return resultreturn wrapper@timer_decorator
def slow_function():import timetime.sleep(1)return "完成!"slow_function()
列表推導式與Lambda函數
列表推導式
列表推導式提供了一種基于現有序列創建新列表的簡潔方式。
# 基本列表推導式
squares = [x**2 for x in range(10)]
print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# 帶條件的列表推導式
even_squares = [x**2 for x in range(10) if x % 2 == 0]
print(even_squares) # [0, 4, 16, 36, 64]# 嵌套列表推導式
matrix = [[i+j for j in range(3)] for i in range(3)]
print(matrix) # [[0, 1, 2], [1, 2, 3], [2, 3, 4]]
Lambda函數
Lambda函數是可以內聯定義的小型匿名函數。
# 基本lambda函數
square = lambda x: x**2
print(square(5)) # 25# 多參數lambda
add = lambda x, y: x + y
print(add(3, 4)) # 7# lambda結合列表推導和map
numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x*2, numbers))
print(doubled) # [2, 4, 6, 8, 10]
實用示例
數據處理函數
def process_data(data, filters=None, transform=None):"""使用可選的過濾和轉換處理數據列表。參數:data: 要處理的值列表filters: 要應用的過濾函數列表transform: 應用于過濾后數據的轉換函數"""result = data# 如果有過濾器則應用if filters:for filter_func in filters:result = [item for item in result if filter_func(item)]# 如果有轉換則應用if transform:result = [transform(item) for item in result]return result# 示例用法
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
is_even = lambda x: x % 2 == 0
is_greater_than_five = lambda x: x > 5
double = lambda x: x * 2# 使用過濾和轉換處理數據
result = process_data(numbers,filters=[is_even, is_greater_than_five],transform=double
)
print(result) # [12, 16, 20]
函數中的錯誤處理
def safe_divide(a, b):"""安全地進行除法運算并處理錯誤。"""try:result = a / bexcept ZeroDivisionError:print("錯誤: 除數為零!")return Noneexcept TypeError:print("錯誤: 除法類型無效!")return Noneelse:return resultfinally:print("嘗試了除法操作")# 示例用法
print(safe_divide(10, 2)) # 5.0
print(safe_divide(10, 0)) # None(帶錯誤信息)
print(safe_divide(10, "2")) # None(帶錯誤信息)
生成器函數
def fibonacci_generator(n):"""生成n個斐波那契數。"""a, b = 0, 1count = 0while count < n:yield aa, b = b, a + bcount += 1# 使用生成器
fib = fibonacci_generator(10)
fibonacci_list = list(fib)
print(fibonacci_list) # [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
本教程涵蓋了Python函數的基礎和高級概念。通過修改示例和編寫自己的函數來練習這些概念。記住,函數是組織代碼、提高可維護性和復用性的強大工具。