摘要:本文將介紹筆者在工作中遇到的的一個坑,那就是使用列表作為默認參數。另一個需要注意的是,使用列表作為函數的默認參數時,列表的內容變化情況。這是使用列表作為默認參數的一個坑。
??本文將介紹筆者在工作中遇到的Python的一個坑,那就是使用列表作為默認參數。
??我們知道,在Python中,列表(list)是可變對象,所以列表的內容可能會在函數內改變。另一個需要注意的是,使用列表作為函數的默認參數時,列表的內容變化情況。
??首先,我們看以下的代碼例子:
def add(x, lst=[]): if x not in lst: lst.append(x) return lst def main(): list1 = add(1) print(list1) list2 = add(2) print(list2) list3 = add(3, [11, 12, 13, 14]) print(list3) list4 = add(4) print(list4) main()
你可能以為輸出的結果會是:
[1] [2] [11, 12, 13, 14, 3] [4]
但事實上,該程序輸出的結果是:
[1] [1, 2] [11, 12, 13, 14, 3] [1, 2, 4]
這是為什么呢?函數add的功能是當x不在列表中時,將x追加給列表lst。當函數第一次執行時,參數lst的默認值[]被創建。這個默認值只會被創建一次。add(1)將1加到lst。當函數再次被調用時,lst是[1]而不是[],因為lst只被創建一次。當參數的lst為[11,12,13,14]時,lst就是[11,12,13,14]。list4調用函數時,使用默認參數,因此,現在默認參數lst為[1,2]。
??為了更好地理解調用情況,可以在add函數中輸出lst的id,如以下代碼:
def add(x, lst=[]): print(id(lst)) if x not in lst: lst.append(x) return lst def main(): list1 = add(1) print(list1) list2 = add(2) print(list2) list3 = add(3, [11, 12, 13, 14]) print(list3) list4 = add(4) print(list4) main()
輸出結果如下:
4469603648 [1] 4469603648 [1, 2] 4469670472 [11, 12, 13, 14, 3] 4469603648 [1, 2, 4]
可以看到,list1, list2, list4調用時默認參數的id并沒有發生改變,而list3的id發生了改變。
??這是Python使用列表作為默認參數的一個坑。那么,如何避免踩坑呢?如果想要使用默認列表在每次函數調用時都是[],可以像下面的程序那樣修改函數參數:
def add(x, lst=None): if lst is None: lst = [] if x not in lst: lst.append(x) return lst def main(): list1 = add(1) print(list1) list2 = add(2) print(list2) list3 = add(3, [11, 12, 13, 14]) print(list3) list4 = add(4) print(list4) main()
輸出的結果如下:
[1] [2] [11, 12, 13, 14, 3] [4]
本次分享到此結束,感謝閱讀~
注意:本人現已開通微信公眾號: Python爬蟲與算法(微信號為:easy_web_scrape), 歡迎大家關注哦~~
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43076.html
摘要:結果應該與以前略有不同響應頭沒有輸出,這意味著文件是在沒有壓縮的情況下提供。文件的響應頭下一步是將配置支持其他類型文件的壓縮。下一步是檢查配置的更改是否按預期工作。現在,只有圖像文件才能保持未壓縮狀態。 歡迎大家前往騰訊云+社區,獲取更多騰訊海量技術實踐干貨哦~ 本文由小鐵匠米蘭的v 發表于云+社區專欄 簡介 網站加載的速度取決于瀏覽器必須下載的所有文件的大小。減少要傳輸的文件的...
摘要:所有默認參數值則存儲在函數對象的屬性中,它的值為一個列表,列表中每一個元素均為一個默認參數的值。你可以定義一個對象作為占位符,如下面例子雖然應該避免默認參數值為可變對象,不過有時候使用可變對象作為默認值會收到不錯的效果。 原文地址 在stackoverflow上看到這樣一個程序: #! /usr/bin/env python # -*- coding: utf-8 -*- class...
閱讀 2078·2021-10-08 10:21
閱讀 2471·2021-09-29 09:34
閱讀 3494·2021-09-22 15:51
閱讀 4926·2021-09-22 15:46
閱讀 2314·2021-08-09 13:42
閱讀 3434·2019-08-30 15:52
閱讀 2723·2019-08-29 17:13
閱讀 1555·2019-08-29 11:30