日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python默认参数 可变对象_当心Python函数可变默认参数(list,set,dict…)的陷阱

發布時間:2025/3/20 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python默认参数 可变对象_当心Python函数可变默认参数(list,set,dict…)的陷阱 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

絕大多數情況下,Python是一個干凈具有一致性的語言。然而,有些少數情況會讓初學者感到困惑。其中有些情況是有意識的但會成為潛在的莫名其妙,而有些可以說是語言贅肉。下面我們看看使用可變默認參數(Mutable default arguments)時會出現什么莫名其妙的狀況。

你可能寫了以下函數,它有一個默認參數是一個list:

def append_to(element, to=[]):

to.append(element)

return to

然后調用該函數:

my_list = append_to(12)

print(my_list)

my_other_list = append_to(42)

print(my_other_list)

A new list is created each time the function is called if a second argument isn’t provided, so that the output is:

每次調用該函數,如果第二個參數沒有提供(使用默認參數),一個新的list將會生成,所以輸出應該是:

[12]

[42]

但是,結果并非上面那樣,而是下面這樣:

[12]

[12, 42]

當該函數被定義時,一次性生成一個list作為默認參數,后面每次成功調用都是使用的第一次生成的那個list。

Python的默認參數只在函數被定義時生成一次,而非每次調用時生成。這就意味著如果你使用可變默認參數并改變它,所有調用該函數的結果都是這個可變對象。

正確的做法應該是:

讓默認參數為None(None通常是一個很好的選擇),每次調用時創建一個新對象。

def append_to(element, to=None):

if to is None:

to = []

to.append(element)

return to

同時也有注意,該函數要傳遞一個list對象作為第二個參數,因為函數中對它進行了append操作。

文章首發于我的個人博客:www.yuanrenxue.com

微信公眾號:猿人學Python

總結

以上是生活随笔為你收集整理的python默认参数 可变对象_当心Python函数可变默认参数(list,set,dict…)的陷阱的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。