管理預設參數以避免意外突變
在 Python 中,當預設參數是可變物件時,有時會導致意外行為。例如,使用空列表作為函數的預設參數可能會導致清單「記住」在先前呼叫中新增到其中的舊資料。
考慮以下函數:
def my_func(working_list=[]): working_list.append("a") print(working_list)
第一次呼叫時,將建立預設清單並附加「a」。但是,對該函數的後續呼叫會繼續更新相同列表,從而導致意外行為。為了解決這個問題,我們必須確保每次呼叫函數時都使用新的空列表。
一種方法是明確將預設參數設為None 並在函數內檢查它:
def my_func(working_list=None): if working_list is None: working_list = [] # alternative syntax: # working_list = [] if working_list is None else working_list working_list.append("a") print(working_list)
此方法確保在沒有明確參數的情況下調用函數時創建一個新的空列表。
或者,您可以使用理解來建立清單並將其指派給預設參數:
def my_func(working_list=[[]]): working_list[0].append("a") print(working_list)
此方法也可以在每次呼叫時有效地產生一個新的空列表。
Python 文件建議使用 None 作為預設參數,並且明確地檢查它。根據 PEP 8 指南,應使用「is」或「is not」運算子與 None 進行比較。
以上是如何在 Python 中使用可變預設參數來防止意外行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!