$ python2.7 -m timeit 'd={}'
10000000 loops, best of 3: 0.0331 usec per loop
$ python2.7 -m timeit 'd=dict()'
1000000 loops, best of 3: 0.19 usec per loop
Зачем использовать один над другим?
$ python2.7 -m timeit 'd={}'
10000000 loops, best of 3: 0.0331 usec per loop
$ python2.7 -m timeit 'd=dict()'
1000000 loops, best of 3: 0.19 usec per loop
Зачем использовать один над другим?
Я один из тех, кто предпочитает слова для пунктуации - это одна из причин, по которой я выбрал Python для Perl. "Жизнь лучше без брекетов" (старый девиз Python, который по-прежнему шел на футболке с мультфильмом улыбающегося подростка;-) (изначально предназначался для обозначения скобок и отступов для группировки, конечно, но, эй, скобки - скобки! -).
"Оплачивать" несколько наносекунд (с целью использования четкого, легко читаемого короткого слова вместо брекетов, скобок и whatnots), как правило, доступно (это в основном стоимость поиска в пространстве имен встроенных компонентов, цена, которую вы платите каждый раз, когда вы используете встроенный тип или функцию, и вы можете мягко оптимизировать его назад, подняв некоторые из них из циклов).
Итак, мне обычно нравится писать dict()
для {}
, list(L)
вместо L[:]
, а также list()
для []
, tuple()
для ()
, и т.д. - просто общий стиль предпочтения для произносимого кода. Когда я работаю над существующей базой кода, которая использует другой стиль, или когда у моих товарищей по команде в новом проекте есть сильные предпочтения, я могу согласиться с этим, конечно (не без попытки немного евангелизации в случае товарищей по команде, хотя; -.)
d=dict()
требуется поиск в locals()
, затем globals()
, то __builtins__
, d={}
не
Если люди используют (просто) dict()
over (just) {}
, это обычно потому, что они не знают о {}
(что довольно подвиг) или потому, что они считают это более ясным (что субъективно, но нечасто.)
Есть вещи, которые вы можете сделать с dict
, которые вы не можете сделать с {}
, хотя, например, передать его тому, что ожидает вызываемого, например collections.defaultdict(dict)
. Также существует тот факт, что вы можете вызвать dict
с аргументами ключевого слова, которые предпочитают некоторые люди:
>>> dict(spam=1, ham=2)
{'ham': 2, 'spam': 1}
Лично я предпочитаю синтаксис dict dicteral, потому что он работает лучше, если вы хотите использовать ключи, которые не являются допустимыми идентификаторами:
>>> dict(pass=1)
File "<stdin>", line 1
dict(pass=1)
^
SyntaxError: invalid syntax
>>> dict('ham and eggs'=1)
File "<stdin>", line 1
SyntaxError: keyword can't be an expression
(и стили смешивания только потому, что некоторые ключи не являются допустимыми идентификаторами, yuck.)
Дуг Хеллманн написал исчерпывающее сравнение различий в производительности.
ТЛ; др
В CPython 2.7 использование dict() для создания словарей занимает до 6 раз больше времени и требует больше операций по выделению памяти, чем буквальный синтаксис. Используйте {} для создания словарей, особенно если вы их предварительно заполняете, если только буквальный синтаксис не работает для вашего случая.
Как сказал Томас, я использую dict(), чтобы указать ключевые слова. Особенно, если я вручную создаю большой словарь для инициализации данных или еще что-то: возможность использования синтаксиса ключевых слов сохраняет мне два нажатия клавиш (и связанный визуальный беспорядок) для каждого элемента.