Python中定義函數時參數有默認值的小陷阱

    在定義函數的時候皇忿,如果函數的參數有默認值,有兩種類型的參數撒遣,一種是整數载城,字符串這種不可變類型,另一種是列表這種可變類型,對于第一種情況沒有什么特殊的地方垮兑,但是對于可變類型冷尉,有一個微妙的小陷阱。

可變類型以及小陷阱:

# coding=utf-8
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]系枪,很明顯使用默認參數的情況下雀哨,每調用一次append_item,都在之前得list1基礎上添加元素嗤无。但是不使用默認值震束,就沒有這種情況了,這是為什么呢当犯?

原因:在創(chuàng)建上面的函數時垢村,list1參數被設置為引用一個新的列表,之后嚎卫,在僅使用第一個參數調用該函數(即第二個使用默認參數)時嘉栓,默認的列表都將是函數本身創(chuàng)建時指定的那個列表,因此將不會再有新的列表得以創(chuàng)建拓诸。

我們所期待的是侵佃,在每次僅使用第一個參數調用該函數時,都會創(chuàng)建一個新的空列表奠支,下面進行改動:

# coding=utf-8
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]
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末馋辈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子倍谜,更是在濱河造成了極大的恐慌迈螟,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尔崔,死亡現(xiàn)場離奇詭異答毫,居然都是意外死亡,警方通過查閱死者的電腦和手機季春,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門洗搂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人载弄,你說我怎么就攤上這事耘拇。” “怎么了宇攻?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵驼鞭,是天一觀的道長。 經常有香客問我尺碰,道長挣棕,這世上最難降的妖魔是什么译隘? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮洛心,結果婚禮上固耘,老公的妹妹穿的比我還像新娘。我一直安慰自己词身,他們只是感情好厅目,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著法严,像睡著了一般损敷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上深啤,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天拗馒,我揣著相機與錄音,去河邊找鬼溯街。 笑死诱桂,一個胖子當著我的面吹牛,可吹牛的內容都是我干的呈昔。 我是一名探鬼主播挥等,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼堤尾!你這毒婦竟也來了肝劲?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤郭宝,失蹤者是張志新(化名)和其女友劉穎辞槐,沒想到半個月后,有當地人在樹林里發(fā)現(xiàn)了一具尸體剩蟀,經...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年切威,在試婚紗的時候發(fā)現(xiàn)自己被綠了育特。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡先朦,死狀恐怖缰冤,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情喳魏,我是刑警寧澤棉浸,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站刺彩,受9級特大地震影響迷郑,放射性物質發(fā)生泄漏枝恋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一嗡害、第九天 我趴在偏房一處隱蔽的房頂上張望焚碌。 院中可真熱鬧,春花似錦霸妹、人聲如沸十电。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹃骂。三九已至,卻和暖如春罢绽,著一層夾襖步出監(jiān)牢的瞬間畏线,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工有缆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留象踊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓棚壁,卻偏偏與公主長得像杯矩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子袖外,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內容

  • 函數和對象 1史隆、函數 1.1 函數概述 函數對于任何一門語言來說都是核心的概念。通過函數可以封裝任意多條語句曼验,而且...
    道無虛閱讀 4,543評論 0 5
  • 寫在前面的話 代碼中的# > 表示的是輸出結果 輸入 使用input()函數 用法 注意input函數輸出的均是字...
    FlyingLittlePG閱讀 2,743評論 0 8
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學習記錄文檔泌射,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,737評論 2 9
  • 官網 中文版本 好的網站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,369評論 0 5
  • 前段時間在寢室無意間討論起這個話題 瞬間感覺我們的父親都是一個模樣的 對我們漠不關心 對我們指手畫腳的拿這拿那 等...
    Wlin千謙閱讀 235評論 0 0