Python定義函數(shù)時(shí)參數(shù)有默認(rèn)值問(wèn)題解決
這篇文章主要介紹了Python定義函數(shù)時(shí)參數(shù)有默認(rèn)值問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
在定義函數(shù)的時(shí)候,如果函數(shù)的參數(shù)有默認(rèn)值,有兩種類(lèi)型的參數(shù),一種是整數(shù),字符串這種不可變類(lèi)型,另一種是列表這種可變類(lèi)型,對(duì)于第一種情況沒(méi)有什么特殊的地方,但是對(duì)于可變類(lèi)型,有一個(gè)微妙的小陷阱。
可變類(lèi)型以及小陷阱:
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]
問(wèn)題:為什么會(huì)輸出[1,2],[1,2,6],很明顯使用默認(rèn)參數(shù)的情況下,每調(diào)用一次append_item,都在之前得list1基礎(chǔ)上添加元素。但是不使用默認(rèn)值,就沒(méi)有這種情況了,這是為什么呢?
原因:在創(chuàng)建上面的函數(shù)時(shí),list1參數(shù)被設(shè)置為引用一個(gè)新的列表,之后,在僅使用第一個(gè)參數(shù)調(diào)用該函數(shù)(即第二個(gè)使用默認(rèn)參數(shù))時(shí),默認(rèn)的列表都將是函數(shù)本身創(chuàng)建時(shí)指定的那個(gè)列表,因此將不會(huì)再有新的列表得以創(chuàng)建。
我們所期待的是,在每次僅使用第一個(gè)參數(shù)調(diào)用該函數(shù)時(shí),都會(huì)創(chuàng)建一個(gè)新的空列表,下面進(jìn)行改動(dò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]
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
利用Django提供的ModelForm增刪改數(shù)據(jù)的方法
這篇文章主要介紹了利用Django提供的ModelForm增刪改數(shù)據(jù),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
Python實(shí)現(xiàn)多功能音樂(lè)播放器詳解
這篇文章主要介紹了如何通過(guò)Python制作一個(gè)簡(jiǎn)易的音樂(lè)播放器,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定價(jià)值,需要的可以參考一下2022-02-02
淺談Pytorch中的torch.gather函數(shù)的含義
今天小編就為大家分享一篇淺談Pytorch中的torch.gather函數(shù)的含義,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
Python緩存方案優(yōu)化程序性能提高數(shù)據(jù)訪(fǎng)問(wèn)速度
Python緩存方案是一種優(yōu)化程序性能,提高數(shù)據(jù)訪(fǎng)問(wèn)速度的方案。通過(guò)緩存數(shù)據(jù),可以減少重復(fù)的計(jì)算和IO操作,從而提高程序的運(yùn)行效率。Python中常用的緩存方案包括內(nèi)存緩存、磁盤(pán)緩存和分布式緩存等,根據(jù)實(shí)際需求選擇不同的方案可以幫助我們更好地優(yōu)化程序性能2023-05-05
Python使用Beautiful?Soup(BS4)庫(kù)解析HTML和XML
這篇文章介紹了Python使用Beautiful?Soup(BS4)庫(kù)解析HTML和XML的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06

