Создание списка в Python – что-то подлый?

Извиняюсь, если это не имеет никакого смысла, я очень новичок в Python!

Из тестирования в интерпретаторе я вижу, что list() и [] создают пустой список:

 >>> list() [] >>> [] [] 

Из того, что я узнал до сих пор, единственный способ создать объект – вызвать его конструктор ( __init__ ), но я не вижу, что это происходит, когда я просто набираю [] . Итак, выполнив [] , Python затем сопоставляет это с вызовом list() ?

  • Как передать параметры в сборку в Sublime Text 3?
  • Как получить доступ к функции в пакете виртуальной среды на PyCharm
  • Неполное чтение с помощью httplib
  • Как проверить, была ли вставка успешной с MySQLdb в Python?
  • извлечение дней из значения numpy.timedelta64
  • сумма абсолютных разностей числа в массиве
  • Как центрировать окно tkinter и сохранить поведение «подходит для детей»?
  • UTF-8 HTML и CSS-файлы с спецификацией (и как удалить спецификацию с Python)
  • 5 Solutions collect form web for “Создание списка в Python – что-то подлый?”

    Нет, Python не вызывает list() , или вы можете повлиять на то, какой тип [] создает, присваивая списку, который вы не можете:

     >>> import __builtin__ >>> __builtin__.list = set >>> list() set([]) >>> [] [] 

    [] является синтаксисом для создания списка. Это встроенный тип, и он имеет специальный синтаксис, точно так же, как dicts и строки и ints и float и множество других типов.

    Создание экземпляров типов также можно выполнить, вызвав тип, например list() который в свою очередь вызовет конструктор типа и инициализатор для вас. Вызов инициализатора ( __init__ ) напрямую не создает новый экземпляр типа. Вызов конструктора ( __new__ ) делает, но вы не должны называть его напрямую.

    Эти две конструкции обрабатываются совершенно по-другому:

     >>> import dis >>> def f(): return [] ... >>> dis.dis(f) 1 0 BUILD_LIST 0 3 RETURN_VALUE >>> def f(): return list() ... >>> dis.dis(f) 1 0 LOAD_GLOBAL 0 (list) 3 CALL_FUNCTION 0 6 RETURN_VALUE >>> 

    Форма [] создает список, используя код операции BUILD_LIST , тогда как форма list() вызывает конструктор объекта list .

    Я начал изучать питон вчера … Думаю, вам придется сказать, что его внутренне сопоставлены

     >>> a = [] >>> type(a) <type 'list'> >>> a = list() >>> type(a) <type 'list'> 

    В дополнение к другим ответам, из справочника по языку :

    Отображение списка – это, возможно, пустая серия выражений, заключенных в квадратные скобки:

     list_display ::= "[" [expression_list | list_comprehension] "]" ... 

    Отображение списка дает новый объект списка.

    В нем явно не упоминается, как реализуется «предоставление нового объекта списка». Это может быть вызов конструктора list() , как вы упомянули. Или, может быть, списки, будучи настолько элементарными, получают специальное лечение, а list() фактически сопоставляется с чем-то совершенно другим.

    В любом случае, [] , конечно, не отображается на вызов конструктора типа с именем __builtins__.list , потому что переопределение этого типа по-прежнему вызывает [] возврат фактического списка, как показали другие респонденты.

    Python, как и большинство языков программирования, имеет нечто, называемое литералами , что означает, что специальный синтаксис можно использовать для записи некоторых из наиболее важных типов значений. Очень мало этого необходимо, но это упрощает использование Python, что мы можем писать литералы.

     >>> 0 0 >>> int() 0 >>> 5 5 >>> int('5') # I'm using a string literal here though! 5 >>> 0.0 0.0 >>> float() 0.0 >>> "" '' >>> str() '' >>> u"" u'' >>> unicode() u'' >>> () () >>> tuple() () >>> {} {} >>> dict() {} 

    Когда мы создаем свои собственные типы (классы), мы создаем их экземпляры, используя их конструкторы, например list для списков. Когда мы используем литералы, это своего рода синтаксический сахар для list вызовов, но на самом деле он называет те же самые основные вещи за сценой.

    Interesting Posts

    самый умный способ объединения двух списков в форматированную строку

    Каков самый простой способ использования Pdon pdb для проверки причины необработанного исключения?

    Как получить доступ к функции в пакете виртуальной среды на PyCharm

    В python, сортировка по дате поля, поле иногда может быть нулевым

    Vim автоматически удаляет отступы в комментариях Python

    Преобразование pandas dataframe в массив numpy, сохранение индекса

    Получение температуры процессора с помощью Python?

    Целочисленное деление и модуляция с отрицательными операндами в Python

    Подавать статические файлы на героку с помощью AWS S3 для django?

    Разделение строки на 2-буквенные сегменты

    Pandas Dataframe, измените значения на «диагональ» (где индексное значение равно имени столбца)

    Логическое значение объектов в Python

    Аннотировать тепловую карту со значением из кадра данных Pandas

    Изменение 64-битного реестра с 32-битного Python

    Tkinter управляет моими циклами событий рядом с моим основным окошком

    Python - лучший язык программирования в мире.