Ответ 1
Одна из проблем заключается в том, что для того, чтобы это изменение нарушило обратную совместимость, из-за использования этого типа использования конструктора, которое существует сейчас:
>>> dict(one=1, two=2)
{'two': 2, 'one': 1}
После прочтения этого вопроса я заметил, что S. Lott, возможно, любил использовать "упорядоченный defaultdict", но он не существует. Теперь я задаюсь вопросом: почему в Python у нас так много классов dict?
Почему бы не сделать что-то подобное,
dict(initializer=[], sorted=False, ordered=False, default=None,
weak_keys=False, weak_values=False)
который объединяет все и предоставляет каждую полезную комбинацию?
Одна из проблем заключается в том, что для того, чтобы это изменение нарушило обратную совместимость, из-за использования этого типа использования конструктора, которое существует сейчас:
>>> dict(one=1, two=2)
{'two': 2, 'one': 1}
Эти дополнительные опции не предоставляются бесплатно. Поскольку 99,9% Python построено на dict
, очень важно сделать его как можно более минимальным и быстрым.
Потому что реализации сильно различаются. В основном вы получите dict
factory, который возвращает экземпляр _dict
(очень быстрый, низкопоставленный словарь - текущий dict
), ordereddict
, defaultdict
,... класс. Кроме того, вы больше не можете инициализировать словари с аргументами с ключевыми словами; программы, основанные на этом, потерпят неудачу:
>>> dict(sorted=42)
{'sorted': 42}
# Your proposal would lead to an empty dictionary here (breaking compatibility)
Кроме того, когда это разумно, различные классы уже наследуют друг от друга:
>>> collections.defaultdict.__bases__
(<type 'dict'>,)
Вот почему языки имеют "mixins".
Вы можете попытаться придумать что-то вроде следующего, определив правильный набор классов.
class defaultdict( dict, unordered, default_init ): pass
class OrderedDict( dict, ordered, nodefault_init ): pass
class WeakKeyDict( dict, ordered, nodefault_init, weakkey ): pass
class KeyValueDict( dict, ordered, nodefault_init, weakvalue ): pass
Затем, как только у вас есть эти "унифицированные" словари, ваши приложения выглядят следующим образом:
groups= defaultdict( list )
Нет реальных изменений в приложении, есть?