Есть ли ощутимая разница между двумя формами синтаксиса, доступными для создания пустых списков/словарей Python, т.е.
l = list()
l = []
и
d = dict()
d = {}
Мне интересно, предпочтительнее ли использовать один из них.
Есть ли ощутимая разница между двумя формами синтаксиса, доступными для создания пустых списков/словарей Python, т.е.
l = list()
l = []
и
d = dict()
d = {}
Мне интересно, предпочтительнее ли использовать один из них.
Форма функции вызывает конструктор во время выполнения, чтобы вернуть новый экземпляр, тогда как буквальная форма заставляет компилятор "создать" его (действительно, чтобы выпустить байт-код, который приводит к новому объекту) во время компиляции. Первый может быть полезен, если (по какой-то причине) классы были локально отскочены к разным типам.
>>> def f():
... []
... list()
... {}
... dict()
...
>>> dis.dis(f)
2 0 BUILD_LIST 0
3 POP_TOP
3 4 LOAD_GLOBAL 0 (list)
7 CALL_FUNCTION 0
10 POP_TOP
4 11 BUILD_MAP 0
14 POP_TOP
5 15 LOAD_GLOBAL 1 (dict)
18 CALL_FUNCTION 0
21 POP_TOP
22 LOAD_CONST 0 (None)
25 RETURN_VALUE
Основное отличие состоит в том, что одна форма включает поиск имени, а другой - нет. Пример, иллюстрирующий эту разницу:
def list():
return {}
print []
print list()
печатает
[]
{}
Конечно, вы определенно не должны делать такую ерунду.
Моя кишка говорит мне, что оба приемлемы, если вы согласны.
Я не знаю никакой разницы, было бы главным образом стилистическим предпочтением.