2015-11-15 8 views
10

В чем разница между следующим кодом:Какая разница между списком() и []

foo = list() 

И

foo = [] 

Python предполагает, что есть один способ делать вещи, но иногда там кажется, более чем один.

+1

Другие вопросы: 'dict()' и '{}', 'tuple()' и '()' и т. Д. –

+0

См. Также: [Инициализация объектов Python] (https://stackoverflow.com/questions/ 13991248/python-object-initialization-performance) – ShadowRanger

ответ

14

Один это вызов функции, и один это буквальный:

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

Используйте второй формы. Это больше Pythonic, и это, вероятно, быстрее (поскольку это не связано с загрузкой и вызовом отдельного funciton).

9

list - глобальное имя, которое может быть переопределено во время выполнения. list() называет это имя.

[] всегда листинг.

+5

Обратите внимание, что только ужасные люди переопределяют «список». (Это хороший момент.): P – Doorknob

+0

@Doorknob: Из взгляда всех вопросов на SO, где 'list' (и' str' и 'dict') используются как имена переменных, я склонен согласиться. :) –

5

Для этого необходимо отметить следующее: list((a,b,c)) вернет [a,b,c], тогда как [(a,b,c)] не распакует кортеж. Это может быть полезно, если вы хотите преобразовать кортеж в список. Обратный работает тоже, tuple([a,b,c]) возвращает (a,b,c).

Редактировать: Как упоминает orlp, это работает для любых итеративных, а не только кортежей.

+2

Я бы сказал, что это самое важное различие, так как именно оно дает разные результаты. – SethMMorton

+1

Это значение сохраняется для любого итерационного. – orlp

+2

Полностью согласен с @SethMMorton: 'list()' принимает только итерации в качестве аргумента, а '[]' просто обертывает все, что вы набросите на него списком. Итак, если вы попытаетесь запустить 'list (1)', вы получите исключение, так как 'int' не итерируется, а' [1] 'будет работать нормально. Это также объясняет свойство распаковки! – alfasin

Смежные вопросы