различия между "d = dict ()" и "d = {}" - PullRequest
34 голосов
/ 30 апреля 2010
$ 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

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

Ответы [ 5 ]

53 голосов
/ 30 апреля 2010

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

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

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

25 голосов
/ 30 апреля 2010

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

9 голосов
/ 30 апреля 2010

Если люди используют (просто) dict() сверх (просто) {}, это, как правило, потому, что они не знают о {} (что является большим подвигом), или потому что они думают, что это яснее (что субъективно , но необычно.)

Есть вещи, которые вы можете сделать с dict, которые вы не можете сделать с {}, такие как передача его чему-то, что ожидает вызова, например collections.defaultdict(dict). Также существует тот факт, что вы можете вызывать dict с аргументами ключевых слов, которые предпочитают некоторые люди:

>>> dict(spam=1, ham=2)
{'ham': 2, 'spam': 1}

Лично я предпочитаю синтаксис dict literal, потому что он работает лучше, когда вы хотите использовать ключи, которые не являются допустимыми идентификаторами:

>>> 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

(и смешивание стилей только потому, что некоторые ключи не являются допустимыми идентификаторами, чёрт.)

7 голосов
/ 06 декабря 2012

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

Т.Л., др

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

1 голос
/ 01 мая 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...