В чем разница между следующим кодом:Какая разница между списком() и []
foo = list()
И
foo = []
Python предполагает, что есть один способ делать вещи, но иногда там кажется, более чем один.
В чем разница между следующим кодом:Какая разница между списком() и []
foo = list()
И
foo = []
Python предполагает, что есть один способ делать вещи, но иногда там кажется, более чем один.
Один это вызов функции, и один это буквальный:
>>> 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).
list
- глобальное имя, которое может быть переопределено во время выполнения. list()
называет это имя.
[]
всегда листинг.
Обратите внимание, что только ужасные люди переопределяют «список». (Это хороший момент.): P – Doorknob
@Doorknob: Из взгляда всех вопросов на SO, где 'list' (и' str' и 'dict') используются как имена переменных, я склонен согласиться. :) –
Для этого необходимо отметить следующее: list((a,b,c))
вернет [a,b,c]
, тогда как [(a,b,c)]
не распакует кортеж. Это может быть полезно, если вы хотите преобразовать кортеж в список. Обратный работает тоже, tuple([a,b,c])
возвращает (a,b,c)
.
Редактировать: Как упоминает orlp, это работает для любых итеративных, а не только кортежей.
Я бы сказал, что это самое важное различие, так как именно оно дает разные результаты. – SethMMorton
Это значение сохраняется для любого итерационного. – orlp
Полностью согласен с @SethMMorton: 'list()' принимает только итерации в качестве аргумента, а '[]' просто обертывает все, что вы набросите на него списком. Итак, если вы попытаетесь запустить 'list (1)', вы получите исключение, так как 'int' не итерируется, а' [1] 'будет работать нормально. Это также объясняет свойство распаковки! – alfasin
Другие вопросы: 'dict()' и '{}', 'tuple()' и '()' и т. Д. –
См. Также: [Инициализация объектов Python] (https://stackoverflow.com/questions/ 13991248/python-object-initialization-performance) – ShadowRanger