Python 函數:學會定義函數,包括參數傳遞、返回值
定義函數是編程中的基本技能之一,它允許我們將代碼組織成可重用的塊。Python 提供了簡單而強大的方式來定義函數,并且支持多種參數傳遞方式和返回值處理。
定義函數
使用 def 關鍵字來定義一個函數。函數定義通常包括函數名、參數列表(可選)和函數體。以下是一個簡單的例子:
def greet():
print("Hello, world!")
調用這個函數很簡單:
greet() # 輸出: Hello, world!
參數傳遞
位置參數 (Positional Arguments)
這是最常用的參數類型,參數按照它們在函數定義中的順序傳遞給函數。
def greet(name):
print(f"Hello, {name}!")
greet("Alice") # 輸出: Hello, Alice!
默認參數 (Default Arguments)
可以為參數指定默認值,如果調用時沒有提供對應的參數,則使用默認值。
def greet(name="world"):
print(f"Hello, {name}!")
greet() # 輸出: Hello, world!
greet("Bob") # 輸出: Hello, Bob!
關鍵字參數 (Keyword Arguments)
您可以在調用函數時通過參數名來指定參數值,這樣就不需要考慮參數的位置。
def greet(first_name, last_name):
print(f"Hello, {first_name} {last_name}!")
greet(last_name="Smith", first_name="John") # 輸出: Hello, John Smith!
可變長度參數 (*args 和 **kwargs)
有時我們不知道需要傳遞多少個參數,或者想要傳遞一個字典或列表作為參數。這時可以使用 *args 和 **kwargs。
*args:收集所有額外的位置參數到一個元組中。
**kwargs:收集所有額外的關鍵字參數到一個字典中。
def greet_everyone(*names):
for name in names:
print(f"Hello, {name}!")
greet_everyone("Alice", "Bob", "Charlie")
def greet_with_details(**details):
for key, value in details.items():
print(f"{key}: {value}")
greet_with_details(name="David", age=30)
返回值
函數可以通過 return 語句返回一個或多個值。如果沒有顯式地使用 return,則函數會隱式地返回 None。
def add(a, b):
return a + b
result = add(5, 3)
print(result) # 輸出: 8
返回多個值
Python 函數可以返回多個值,這實際上是返回了一個元組,然后可以解包為多個變量。
def get_user_info():
return "Alice", 25, "Engineer"
name, age, occupation = get_user_info()
print(name, age, occupation) # 輸出: Alice 25 Engineer
示例:結合以上所有概念
下面是一個更復雜的例子,展示了如何將上述所有概念組合在一起:
def calculate_area(shape, *dimensions, **options):
"""
根據形狀計算面積,支持矩形和圓。
:param shape: 形狀名稱 ('rectangle' 或 'circle')
:param dimensions: 對于矩形,傳入兩個維度;對于圓,傳入半徑。
:param options: 其他選項,如是否打印結果。
:return: 計算出的面積
"""
if shape == 'rectangle':
length, width = dimensions
area = length * width
elif shape == 'circle':
radius, = dimensions
area = math.pi * radius ** 2
else:
raise ValueError("Unsupported shape")
if options.get('print_result', False):
print(f"The area of the {shape} is {area:.2f}")
return area
# 使用示例
calculate_area('rectangle', 10, 5, print_result=True)
calculate_area('circle', 7, print_result=True)