Как указывает Тим, all
и any
тривиальны. defaultdict
не намного сложнее. Вот сносная реализация, я верю. По сути это перевод документации в код.
обновление: удалено троичное выражение, потому что я вспомнил, что это не в 2.4
class defaultdict(dict):
def __init__(self, default_factory, *args, **kwargs):
super(defaultdict, self).__init__(*args, **kwargs)
self.default_factory = default_factory
def __missing__(self, key):
try:
self[key] = self.default_factory()
except TypeError:
raise KeyError("Missing key %s" % (key, ))
else:
return self[key]
def __getitem__(self, key):
try:
return super(defaultdict, self).__getitem__(key)
except KeyError:
return self.__missing__(key)
Если вы просто используете его для создания диктата, вы можете изменить EAFP на LBYL для __getitem__
. сейчас он оптимизирован, чтобы создать диктовку, а затем использовать ее некоторое время с множеством поисков без пропусков.
deque
будет сложнее. Хотелось бы, чтобы у меня было время сделать это только потому, что это, наверное, мой любимый из коллекций, но это не тривиально. не бери в голову. Просто прочитайте Тимс пост полностью. Вы получили свое желание.