簡體   English   中英

foo = list,foo = []和foo = list()之間的區別?

[英]Difference between foo=list, foo=[], and foo=list()?

我是python的新手(但不是一般的編程人員),並且真的不了解列表的內容。 我在一個文本文件中有成千上萬個測試集,每個測試集是256(可以是不同的)x,y點。 我要做的是將測試集中的每個點存儲到一個列表中,然后將每個列表存儲在另一個列表中,從而有效地創建2D列表。 我嘗試過的三個選項中的兩個是無錯誤的,但是我不知道不同的選項是什么意思,也不知道為什么我應該選擇一個。 這與“最小驚訝”和“可變默認參數”不同,因為這不能解釋其中的哪個是列表以及其他的定義是什么。

foo= list
foo.append(1)#TypeError: descriptor 'append' requires a 'list' object but received a 'int'

bar= []
bar.append(1)#no error

baz= list()
baz.append(1)#no error

第一個將foo設置為對象list 正如您所發現的,這不是一個空列表。 對象list是內置類型...現在您具有該類型的作用域內別名。 您不能追加類型; 因此錯誤消息。

另外兩種是將變量初始化為空列表的經典方法。 中間一個使用列表文字表示法構造一個列表,而最后一個使用list類型對象作為函數來生成該類型的實例。

當您執行foo = list ,實際上是將foo分配給foo = list的內置python對象。 bar = list()baz = []都將啟動兩個新變量作為新的空缺列表。 但是在python中, var_ = []分配要比var_ = list()快一些。

這是因為foo = list使foo成為list類型的別名。 該行中沒有實例化任何實際的list對象。 但是,如果您有一個list對象,則可以使用list.append() (或foo.append() )來附加到該對象。

像這樣:

foo = list
bar = [1]

list.append(bar, 2)
# bar is now [1, 2]

foo.append(bar, 3)
# bar is now [1, 2, 3]

由於您的示例代碼僅使用一個參數(一個int)調用foo.append() ,因此該異常會抱怨它需要一個list而不是一個int

注意:這不是列表類的特殊功能。 可以兩種形式調用所有實例方法: some_object.func(a, b, c)SomeType.func(some_object, a, b, c)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM