Pull to refresh

Comments 19

А где сравнение производительности то? Из статьи понял, что если надо написать код, который будет создавать в цикле пустые словари и ничего с ними дальше не делать, то лучше использовать {}.

Так вот же в статье указано -

$ python -m timeit "dict()"
10000000 loops, best of 5: 40 nsec per loop
$ python -m timeit "{}"
20000000 loops, best of 5: 19.6 nsec per loop

Это единичный замер с выводом лучшего времени. Нет данных про обычный, средний результат.

Если бы не разбор дальше, было бы совсем ни о чём. А так хороший перевод. Лайк

Я и говорю

если надо написать код, который будет создавать в цикле пустые словари и ничего с ними дальше не делать

*списки. Они же list

Приятное чувство, когда только начал изучать язык и вдруг узнал, что уже делаю в нём словари оптимальным способом)

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

Тоже так делаю. И код лаконичнее выглядит.

Маркер не очень хорошо вычитанного перевода, ничего необычного.

Тот случай, когда лучше вообще не переводить: «аллоцировать» будет понятно всем и не вызовет вопросов.

А ещё это вызывает кровь из глаз

Обычно на русском память "выделяют", кмк устоялось и лаконично звучит

Оригинал тоже мутный, конструктором (constructor) почему-то называется `__new__`, хотя по общепринятой терминологии конструктор это `__init__`

Ну пусть будет так..
Этот текст можно было уложить в один абзац, для литерала размер словаря известен при вызове, поэтому память можно выделить сразу однократно, для конструктора размер неизвестен поэтому память выделяется по частям при разборе аргументов.

Смотря что понимать под словом "конструктор". Метод new() создаёт экземпляр класса, а init() - инициализирует его атрибуты. В документации Питона init() называют не конструктором, а "специальным методом". Процесс конструирования состоит из этих двух методов, поэтому ни new(), ни init() по отдельности не являются конструкторами. В принципе можно назвать и то, и другое конструкторами, но это будет не совсем верное определение.

OK, все верно. Не в каждом учебнике по Питону упоминается new, и конструктором называют init. У меня основной язык C++ там operator new это выделение памяти, а конструктор это инициализация.

Sign up to leave a comment.

Articles