成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Python之在函數(shù)中使用列表作為默認參數(shù)

hufeng / 1067人閱讀

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

??本文將介紹筆者在工作中遇到的Python的一個坑,那就是使用列表作為默認參數(shù)。
??我們知道,在Python中,列表(list)是可變對象,所以列表的內(nèi)容可能會在函數(shù)內(nèi)改變。另一個需要注意的是,使用列表作為函數(shù)的默認參數(shù)時,列表的內(nèi)容變化情況。
??首先,我們看以下的代碼例子:

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()

你可能以為輸出的結(jié)果會是:

[1]
[2]
[11, 12, 13, 14, 3]
[4]

但事實上,該程序輸出的結(jié)果是:

[1]
[1, 2]
[11, 12, 13, 14, 3]
[1, 2, 4]

這是為什么呢?函數(shù)add的功能是當x不在列表中時,將x追加給列表lst。當函數(shù)第一次執(zhí)行時,參數(shù)lst的默認值[]被創(chuàng)建。這個默認值只會被創(chuàng)建一次。add(1)將1加到lst。當函數(shù)再次被調(diào)用時,lst是[1]而不是[],因為lst只被創(chuàng)建一次。當參數(shù)的lst為[11,12,13,14]時,lst就是[11,12,13,14]。list4調(diào)用函數(shù)時,使用默認參數(shù),因此,現(xiàn)在默認參數(shù)lst為[1,2]。
??為了更好地理解調(diào)用情況,可以在add函數(shù)中輸出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()

輸出結(jié)果如下:

4469603648
[1]
4469603648
[1, 2]
4469670472
[11, 12, 13, 14, 3]
4469603648
[1, 2, 4]

可以看到,list1, list2, list4調(diào)用時默認參數(shù)的id并沒有發(fā)生改變,而list3的id發(fā)生了改變。
??這是Python使用列表作為默認參數(shù)的一個坑。那么,如何避免踩坑呢?如果想要使用默認列表在每次函數(shù)調(diào)用時都是[],可以像下面的程序那樣修改函數(shù)參數(shù):

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()

輸出的結(jié)果如下:

[1]
[2]
[11, 12, 13, 14, 3]
[4]

本次分享到此結(jié)束,感謝閱讀~

注意:本人現(xiàn)已開通微信公眾號: Python爬蟲與算法(微信號為:easy_web_scrape), 歡迎大家關(guān)注哦~~

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/43076.html

相關(guān)文章

  • 入門系列之在Nginx配置Gzip

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

    waltr 評論0 收藏0
  • python-函數(shù)

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

    cooxer 評論0 收藏0
  • 陷阱!python參數(shù)默認

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

    Jason 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<