Какая разница между списками() и []
Какая разница между следующим кодом:
foo = list()
и
foo = []
Python предполагает, что есть один способ делать что-то, но иногда кажется, что их больше.
Ответы
Ответ 1
Один вызов функции и один литерал:
>>> 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, и это, вероятно, быстрее (поскольку это не связано с загрузкой и вызовом отдельной функции).
Ответ 2
list
- это глобальное имя, которое может быть переопределено во время выполнения. list()
вызывает это имя.
[]
всегда является литералом списка.
Ответ 3
Для завершения еще нужно отметить, что list((a,b,c))
вернет [a,b,c]
, тогда как [(a,b,c)]
не распакует кортеж. Это может быть полезно, если вы хотите преобразовать кортеж в список. Обратное работает тоже, tuple([a,b,c])
возвращает (a,b,c)
.
Изменить: Как упоминает orlp, это работает для любых итеративных, а не только кортежей.