Различия между "d = dict()" и "d = {}"

$ 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

Зачем использовать один над другим?

Ответ 1

Я один из тех, кто предпочитает слова для пунктуации - это одна из причин, по которой я выбрал Python для Perl. "Жизнь лучше без брекетов" (старый девиз Python, который по-прежнему шел на футболке с мультфильмом улыбающегося подростка;-) (изначально предназначался для обозначения скобок и отступов для группировки, конечно, но, эй, скобки - скобки! -).

"Оплачивать" несколько наносекунд (с целью использования четкого, легко читаемого короткого слова вместо брекетов, скобок и whatnots), как правило, доступно (это в основном стоимость поиска в пространстве имен встроенных компонентов, цена, которую вы платите каждый раз, когда вы используете встроенный тип или функцию, и вы можете мягко оптимизировать его назад, подняв некоторые из них из циклов).

Итак, мне обычно нравится писать dict() для {}, list(L) вместо L[:], а также list() для [], tuple() для (), и т.д. - просто общий стиль предпочтения для произносимого кода. Когда я работаю над существующей базой кода, которая использует другой стиль, или когда у моих товарищей по команде в новом проекте есть сильные предпочтения, я могу согласиться с этим, конечно (не без попытки немного евангелизации в случае товарищей по команде, хотя; -.)

Ответ 2

d=dict() требуется поиск в locals(), затем globals(), то __builtins__, d={} не

Ответ 3

Если люди используют (просто) 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.)

Ответ 4

Дуг Хеллманн написал исчерпывающее сравнение различий в производительности.

ТЛ; др

В CPython 2.7 использование dict() для создания словарей занимает до 6 раз больше времени и требует больше операций по выделению памяти, чем буквальный синтаксис. Используйте {} для создания словарей, особенно если вы их предварительно заполняете, если только буквальный синтаксис не работает для вашего случая.

Ответ 5

Как сказал Томас, я использую dict(), чтобы указать ключевые слова. Особенно, если я вручную создаю большой словарь для инициализации данных или еще что-то: возможность использования синтаксиса ключевых слов сохраняет мне два нажатия клавиш (и связанный визуальный беспорядок) для каждого элемента.