Python - 預設參數
你好,有抱負的Python程式設計師!今天,我們將深入探討Python中的預設參數的神奇世界。作為你友善的鄰居電腦科學老師,我非常高興能引導你走過這段旅程。所以,拿起你最喜歡的飲料,放鬆一下,讓我們一起踏上這段Python冒險吧!
預設參數是什麼?
在我們深入細節之前,先從基礎開始。預設參數是Python中一個方便的功能,允許你為函數參數定義預設值。當你在調用函數時沒有提供特定值,就會使用這些預設值。
可以將預設參數視為一個安全網。如果你忘記指定一個值,它們就在那裡接住你,確保你的函數仍然可以順利運行。這就像有一個朋友總是會在野餐時帶著額外的零食一樣——你可能不是總需要它們,但是有它們在總是好的!
為什麼使用預設參數?
- 它們使你的代碼更具靈活性。
- 它們減少了你需要提供的參數數量。
- 它們在向函數添加新參數時幫助保持 向後兼容性。
現在,讓我們看看這在實踐中是如何工作的!
預設參數的例子
我們從一個簡單的例子開始。假設我們正在創建一個用於問候人的函數:
def greet(name, greeting="Hello"):
return f"{greeting}, {name}!"
# 使用該函數
print(greet("Alice"))
print(greet("Bob", "Hi"))
輸出:
Hello, Alice!
Hi, Bob!
在這個例子中,greeting
是我們的預設參數。如果我們沒有指定問候語,函數將默認使用"Hello"。讓我們來解析一下:
- 我們定義了
greet
函數,它有兩個參數:name
和greeting
。 -
greeting
的默認值是"Hello"。 - 當我們調用
greet("Alice")
時,我們只提供了name
。函數使用默認的"Hello"作為問候語。 - 當我們調用
greet("Bob", "Hi")
時,我們提供了name
和greeting
,所以函數使用"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
讓我們來解析一下:
- 我們的
calculate_total
函數有三個參數:items
(必需),tax_rate
(默認0.08)和discount
(默認0)。 - 在第一次調用中,我們只提供了
items
。函數使用默認稅率和沒有折扣。 - 在第二次調用中,我們提供了
items
和自定義的稅率0.10。折扣仍然是0。 - 在第三次調用中,我們提供了所有三個參數:
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