2014-01-23 2 views
26

Встроенная функция vars() выглядит более Pythonic для меня, но я вижу, что __dict__ используется чаще.Используйте `__dict__` или` vars() `?

Документация Python указывает, что они эквивалентны.

Один блогер claims that __dict__ is faster than vars().

Который я буду использовать?

+1

Это зависит от того, что вы пытаетесь сделать. Во многих случаях ни один подход не является правильным. В этом широком вопросе кажется, что обе работают нормально. –

+2

Я вообще иду с '__dict__', чтобы избежать другого слоя круглых скобок. Квартира лучше, чем вложенная и все. – user2357112

+0

Я думаю, что '__dict__' немного быстрее, не удивительно. Доступ к атрибутам объекта быстрее, чем вызов функции. – aIKid

ответ

4

Я бы использовал vars().

От: https://wiki.python.org/moin/DubiousPython#Premature_Optimization

Хотя правильно применена оптимизация действительно может ускорить код, оптимизируя код, который только редко используют [..] может сделать код труднее читать. [..] Сначала напишите правильный код, затем сделайте его быстрым (при необходимости).

От: The Zen of Python

подсчетов читаемость.

+4

и «Должен быть один - и желательно только один - простой способ сделать это». ... – n611x007

35

Как правило, вы должны рассмотреть Dunder/магические методы, чтобы быть внедрение и вызова функций/методов, как API, так что было бы предпочтительнее использовать vars() над __dict__, таким же образом, что вы могли бы сделать len(a_list) и не a_list.__len__(), или a_dict["key"], а не a_dict.__getitem__('key')

4

Я согласен vars должно быть предпочтительнее. Мое объяснение состоит в том, что, по мере развития python, vars может быть расширен, чтобы сделать больше, чем __dict__ (например, работает для objects with slots, возможно, в 3.7).

Смежные вопросы