国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python之在函數中使用列表作為默認參數

hufeng / 1007人閱讀

摘要:本文將介紹筆者在工作中遇到的的一個坑,那就是使用列表作為默認參數。另一個需要注意的是,使用列表作為函數的默認參數時,列表的內容變化情況。這是使用列表作為默認參數的一個坑。

??本文將介紹筆者在工作中遇到的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

相關文章

  • 入門系列之在Nginx配置Gzip

    摘要:結果應該與以前略有不同響應頭沒有輸出,這意味著文件是在沒有壓縮的情況下提供。文件的響應頭下一步是將配置支持其他類型文件的壓縮。下一步是檢查配置的更改是否按預期工作。現在,只有圖像文件才能保持未壓縮狀態。 歡迎大家前往騰訊云+社區,獲取更多騰訊海量技術實踐干貨哦~ 本文由小鐵匠米蘭的v 發表于云+社區專欄 簡介 網站加載的速度取決于瀏覽器必須下載的所有文件的大小。減少要傳輸的文件的...

    waltr 評論0 收藏0
  • python-函數

    摘要:局部變量只能在其被聲明的函數內部訪問,而全局變量可以在整個程序范圍內訪問。調用函數時,所有在函數內聲明的變量名稱都將被加入到作用域中。 函數(一)定義函數你可以定義一個由自己想要功能的函數,以下是簡單的規則:(1)函數代碼塊以?def?關鍵詞開頭,后接函數標識符名稱和圓括號()。(2)任何傳入參數和自變量必須放在圓括號中間。圓括號之間可以用于定義參數。(3)函數的第一行語句可以選擇性地...

    cooxer 評論0 收藏0
  • 陷阱!python參數默認

    摘要:所有默認參數值則存儲在函數對象的屬性中,它的值為一個列表,列表中每一個元素均為一個默認參數的值。你可以定義一個對象作為占位符,如下面例子雖然應該避免默認參數值為可變對象,不過有時候使用可變對象作為默認值會收到不錯的效果。 原文地址 在stackoverflow上看到這樣一個程序: #! /usr/bin/env python # -*- coding: utf-8 -*- class...

    Jason 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<