[英]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.