$ 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
Почему использование один по другому?
d = dict ()
требует поиска в locals ()
, затем globals ()
, затем __ builtins __
, d = {}
не
Я один из тех, кто предпочитает слова пунктуации - например, это одна из причин, по которой я предпочел Python Perl. «Жизнь лучше без фигурных скобок» (старый девиз Python, который был на футболке с изображением улыбающегося подростка ;-), в конце концов (изначально предназначался для обозначения фигурных скобок и отступов для группировки, конечно, но, эй , брекеты брекеты! -).
«Плата» за несколько наносекунд (с целью использования четких, удобочитаемых коротких слов вместо фигурных скобок, скобок и прочего) обычно доступна (это в основном стоимость поиска во встроенном пространстве имен, цена, которую вы платите каждый раз, когда вы используете встроенный тип или функцию, и вы можете слегка оптимизировать их, подняв несколько запросов из циклов).
Итак, я обычно тот, кто любит писать dict ()
для {}
, list (L)
вместо L [:]
, а также list ()
для []
, tuple ()
для ()
и т. Д. - просто общее предпочтение стиля для произносимого кода. Когда я работаю над существующей кодовой базой, использующей другой стиль, или когда мои товарищи по команде в новом проекте имеют сильные предпочтения в другом направлении, я, конечно, могу с этим согласиться (не без попытки небольшой проповеди в случае с товарищами по команде, хотя ;-).
Если люди используют (просто) dict ()
вместо (просто) {}
, как правило, это потому, что они не знают о {}
(что является большим подвигом) или потому, что они думают, что это яснее (что субъективно, но необычно).
Есть вещи, которые вы можете сделайте с dict
, что вы не можете сделать с {}
, например, передать его чему-то, что ожидает вызываемый объект, например collections.defaultdict (dict)
. Также есть тот факт, что вы можете вызвать dict
с аргументами ключевого слова, что некоторые люди предпочитают:
>>> dict(spam=1, ham=2)
{'ham': 2, 'spam': 1}
Лично я предпочитаю синтаксис литерала dict, потому что он работает лучше, когда вы хотите использовать ключи, которые не являются действительными идентификаторами :
>>> 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
(и смешивание стилей только потому, что некоторые ключи не являются действительными идентификаторами, фу)
Как сказал Томас, я использую dict(), чтобы можно было указать ключевые слова. Особенно если я вручную создаю большой словарь для инициализации данных или чего-то еще: возможность использовать синтаксис ключевых слов экономит мне два нажатия клавиш (и связанный с этим визуальный беспорядок) для каждого элемента.