Разница между foo = list, foo = [] и foo = list ()? - PullRequest
0 голосов
/ 02 мая 2019

Я новичок в 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

Ответы [ 3 ]

4 голосов
/ 02 мая 2019

Первый устанавливает foo для объекта list.Это , а не пустой список, как вы обнаружили.Объект list является встроенным типом ... и теперь у вас есть псевдоним в типе.Вы не можете добавить к типу;отсюда и сообщение об ошибке.

Два других являются классическими способами инициализации переменной в пустой список.Средняя использует списочную литеральную нотацию для построения списка, а последняя вызывает объект типа list как функцию для генерации экземпляра типа.

2 голосов
/ 02 мая 2019

Когда вы делаете foo = list, вы фактически присваиваете foo встроенному объекту списка python. bar = list() и baz = [] обе инициируют две новые переменные в качестве нового свободного списка. Однако в python var_ = [] присваивание происходит немного быстрее по сравнению с var_ = list().

0 голосов
/ 02 мая 2019

Это потому, что 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]

Поскольку ваш пример кода вызывает foo.append() только с одним аргументом (int), исключение жалуется, что ему нужно list, а не int.

Примечание: Это не особенность класса списка. Все методы экземпляра могут быть вызваны в обеих формах: some_object.func(a, b, c) или SomeType.func(some_object, a, b, c)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...