Python定義函數(shù)時參數(shù)有默認值問題解決
這篇文章主要介紹了Python定義函數(shù)時參數(shù)有默認值問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
在定義函數(shù)的時候,如果函數(shù)的參數(shù)有默認值,有兩種類型的參數(shù),一種是整數(shù),字符串這種不可變類型,另一種是列表這種可變類型,對于第一種情況沒有什么特殊的地方,但是對于可變類型,有一個微妙的小陷阱。
可變類型以及小陷阱:
def append_item(item, list1=[]): list1.append(item) return list1 print(append_item((1))) # [1] print(append_item((2))) # [1, 2] print(append_item((6))) # [1, 2, 6] list2 = [6, 7] print(append_item(1, list2)) # [6, 7, 1] print(append_item(9, list2)) # [6, 7, 1,9]
問題:為什么會輸出[1,2],[1,2,6],很明顯使用默認參數(shù)的情況下,每調(diào)用一次append_item,都在之前得list1基礎上添加元素。但是不使用默認值,就沒有這種情況了,這是為什么呢?
原因:在創(chuàng)建上面的函數(shù)時,list1參數(shù)被設置為引用一個新的列表,之后,在僅使用第一個參數(shù)調(diào)用該函數(shù)(即第二個使用默認參數(shù))時,默認的列表都將是函數(shù)本身創(chuàng)建時指定的那個列表,因此將不會再有新的列表得以創(chuàng)建。
我們所期待的是,在每次僅使用第一個參數(shù)調(diào)用該函數(shù)時,都會創(chuàng)建一個新的空列表,下面進行改動:
def append_item(item, list1=[]): if not list1: list1 = [] list1.append(item) return list1 print(append_item((1))) # [1] print(append_item((2))) # [2] print(append_item((6))) # [6] list2 = [6, 7] print(append_item(1, list2)) # [6, 7, 1] print(append_item(9, list2)) # [6, 7, 1,9]
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
python腳本監(jiān)聽域名證書過期時間并通知消息到釘釘(最新推薦)
這篇文章主要介紹了python腳本監(jiān)聽域名證書過期時間并通知消息到釘釘(最新推薦),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-11-11PyCharm2020.1.1與Python3.7.7的安裝教程圖文詳解
這篇文章主要介紹了PyCharm2020.1.1與Python3.7.7的安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08Python3調(diào)用百度AI識別圖片中的文字功能示例【測試可用】
這篇文章主要介紹了Python3調(diào)用百度AI識別圖片中的文字功能,結(jié)合實例形式分析了Python3安裝及使用百度AI接口的相關操作技巧,并附帶說明了百度官方AI平臺的注冊及接口調(diào)用操作方法,需要的朋友可以參考下2019-03-03Python+OpenCV實現(xiàn)圖像融合的原理及代碼
這篇文章主要介紹了Python+OpenCV實現(xiàn)圖像融合的原理及代碼,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-12-12