foo = list,foo = []和foo = list()之间的区别?

时间:2019-05-02 17:17:30

标签: python list

我是python的新手(但不是一般编程人员),并且真的不了解列表的内容。我在一个文本文件中有成千上万个测试集,每个测试集是256(可以是不同的)x,y点。我要做的是将测试集中的每个点存储到一个列表中,然后将每个列表存储在另一个列表中,从而有效地创建2D列表。我尝试过的三个选项中的两个是无错误的,但是我不知道不同的选项是什么意思,也不知道为什么我应该选择一个。 这与"Least Astonishment" and the Mutable Default Argument不同,因为它不能解释其中的哪个是列表以及其他的定义。

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

3 个答案:

答案 0 :(得分:4)

第一个将foo设置为对象list。正如您所发现的,这不是一个空列表。对象list是内置类型...,现在您具有该类型的作用域内别名。您不能追加类型;因此出现错误消息。

另外两种是将变量初始化为空列表的经典方法。中间一个使用列表文字表示法构造一个列表,而最后一个使用list类型对象作为函数来生成该类型的实例。

答案 1 :(得分:2)

执行foo = list时,实际上是将foo分配给list的内置python对象。 bar = list()baz = []都启动两个新变量作为新的空缺列表。但是在python var_ = []中,分配要比var_ = list()快一点。

答案 2 :(得分:0)

这是因为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)