Python - 預設參數

你好,有抱負的Python程式設計師!今天,我們將深入探討Python中的預設參數的神奇世界。作為你友善的鄰居電腦科學老師,我非常高興能引導你走過這段旅程。所以,拿起你最喜歡的飲料,放鬆一下,讓我們一起踏上這段Python冒險吧!

Python - Default Arguments

預設參數是什麼?

在我們深入細節之前,先從基礎開始。預設參數是Python中一個方便的功能,允許你為函數參數定義預設值。當你在調用函數時沒有提供特定值,就會使用這些預設值。

可以將預設參數視為一個安全網。如果你忘記指定一個值,它們就在那裡接住你,確保你的函數仍然可以順利運行。這就像有一個朋友總是會在野餐時帶著額外的零食一樣——你可能不是總需要它們,但是有它們在總是好的!

為什麼使用預設參數?

  1. 它們使你的代碼更具靈活性。
  2. 它們減少了你需要提供的參數數量。
  3. 它們在向函數添加新參數時幫助保持 向後兼容性。

現在,讓我們看看這在實踐中是如何工作的!

預設參數的例子

我們從一個簡單的例子開始。假設我們正在創建一個用於問候人的函數:

def greet(name, greeting="Hello"):
return f"{greeting}, {name}!"

# 使用該函數
print(greet("Alice"))
print(greet("Bob", "Hi"))

輸出:

Hello, Alice!
Hi, Bob!

在這個例子中,greeting是我們的預設參數。如果我們沒有指定問候語,函數將默認使用"Hello"。讓我們來解析一下:

  1. 我們定義了greet函數,它有兩個參數:namegreeting
  2. greeting的默認值是"Hello"。
  3. 當我們調用greet("Alice")時,我們只提供了name。函數使用默認的"Hello"作為問候語。
  4. 當我們調用greet("Bob", "Hi")時,我們提供了namegreeting,所以函數使用"Hi"代替默認值。

例:無關鍵字參數調用函數

現在,讓我們看一個稍微複雜一點的例子。我們將創建一個函數來計算購物車中物品的总價格:

def calculate_total(items, tax_rate=0.08, discount=0):
subtotal = sum(items)
total = subtotal * (1 + tax_rate) - discount
return round(total, 2)

# 使用該函數
cart1 = [10, 20, 30]
print(calculate_total(cart1))
print(calculate_total(cart1, 0.10))
print(calculate_total(cart1, 0.10, 5))

輸出:

64.80
66.00
61.00

讓我們來解析一下:

  1. 我們的calculate_total函數有三個參數:items(必需),tax_rate(默認0.08)和discount(默認0)。
  2. 在第一次調用中,我們只提供了items。函數使用默認稅率和沒有折扣。
  3. 在第二次調用中,我們提供了items和自定義的稅率0.10。折扣仍然是0。
  4. 在第三次調用中,我們提供了所有三個參數:items、稅率和5的折扣。

請記住,當沒有關鍵字參數調用函數時,參數的順序是重要的!Python會按照它們提供的順序將值分配給參數。

可變對象作為預設參數

現在,這裡的事情有點複雜。使用可變對象(如列表或字典)作為預設參數可能會導致意外的行為。讓我告訴你我的意思:

def add_item(item, shopping_list=[]):
shopping_list.append(item)
return shopping_list

print(add_item("apple"))
print(add_item("banana"))
print(add_item("cherry"))

輸出:

['apple']
['apple', 'banana']
['apple', 'banana', 'cherry']

驚訝!列表在每次調用時都在增長。這是因為默認列表只在函數定義時創建一次,而不是每次調用函數時。

為了避免這種情況,我們可以使用None作為默認值,並在函數內部創建一個新的列表:

def add_item(item, shopping_list=None):
if shopping_list is None:
shopping_list = []
shopping_list.append(item)
return shopping_list

print(add_item("apple"))
print(add_item("banana"))
print(add_item("cherry"))

輸出:

['apple']
['banana']
['cherry']

好多了!現在每次調用都會像預期那樣創建一個新的列表。

Python預設參數總結

讓我們將我們學到的知識總結在一個方便的表格中:

概念 描述 示例
基本預設參數 為參數提供默認值 def greet(name, greeting="Hello"):
多個預設參數 函數可以有多個默認參數 def calculate_total(items, tax_rate=0.08, discount=0):
參數順序 在函數定義中,非默認參數必須在默認參數之前 def func(required, optional=default):
可變預設參數 避免使用可變對象作為默認參數 使用None作為默認值,並在函數內部創建對象
關鍵字參數 允許以任何順序使用命名的參數調用函數 calculate_total(items=[10, 20], discount=5)

就是這樣,各位!你們剛剛通過預設參數提升了自己的Python技能。請記住,就像任何強大的工具一樣,明智地使用它們。它們可以使你的代碼更靈活,更容易使用,但是要小心那些可變的默認值!

繼續練習,保持好奇心,編程愉快!在你意識到之前,你將能夠像專業人士一樣编写Python。直到下次,這是你友善的鄰居電腦科學老師,再見!

Credits: Image by storyset