Списки принимают итерируемые объекты в качестве входных данных.Однако, когда входными данными являются int или float, например, list (1), это не принимается.Зачем? - PullRequest
0 голосов
/ 24 мая 2019

Я экспериментировал со свойствами списков, выполняя упражнения Python для объектов наследования и классов. Я понял, что list([1,2,3]) допустим, поскольку сам список является итеративным, но что-то вроде list(1) вернет ошибку. Разве один объект сам по себе не является итеративным? Однако строка с несколькими символами, например list («это список»), не возвращает ошибку, что еще больше усугубляет путаницу (допустим, строка - это один объект). Почему это так?

from  cpython/listobject.c (starting line 2675)
/*[clinic input]
list.__init__
    iterable: object(c_default="NULL") = ()
    /
Built-in mutable sequence.
If no argument is given, the constructor creates a new empty list.
The argument must be an iterable if specified.
[clinic start generated code]*/

Я посмотрел исходный код класса списка на https://github.com/python/cpython/blob/master/Objects/listobject.c, и кажется, что строка 2675-2721 может иметь ответ, который я ищу, но как новичок, мне нужен кто-то, чтобы объяснить процесс создания списка для меня.

1 Ответ

1 голос
/ 24 мая 2019

Функция list() принимает только итерации. Итерации - это объекты, которые можно повторять. Программа не может выполнить итерацию по целому числу, но она может выполнять итерацию по односимвольной строке.

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