Add docstrings.

This commit is contained in:
Raymond Hettinger 2009-04-08 05:39:38 +00:00
parent 7f9bb9142e
commit a5cd6375c0
1 changed files with 25 additions and 0 deletions

View File

@ -36,6 +36,11 @@ class OrderedDict(dict, MutableMapping):
# Those hard references disappear when a key is deleted from an OrderedDict. # Those hard references disappear when a key is deleted from an OrderedDict.
def __init__(self, *args, **kwds): def __init__(self, *args, **kwds):
'''Initialize an ordered dictionary. Signature is the same as for
regular dictionaries, but keyword arguments are not recommended
because their insertion order is arbitrary.
'''
if len(args) > 1: if len(args) > 1:
raise TypeError('expected at most 1 arguments, got %d' % len(args)) raise TypeError('expected at most 1 arguments, got %d' % len(args))
try: try:
@ -47,12 +52,14 @@ class OrderedDict(dict, MutableMapping):
self.update(*args, **kwds) self.update(*args, **kwds)
def clear(self): def clear(self):
'od.clear() -> None. Remove all items from od.'
root = self.__root root = self.__root
root.prev = root.next = root root.prev = root.next = root
self.__map.clear() self.__map.clear()
dict.clear(self) dict.clear(self)
def __setitem__(self, key, value): def __setitem__(self, key, value):
'od.__setitem__(i, y) <==> od[i]=y'
# Setting a new item creates a new link which goes at the end of the linked # Setting a new item creates a new link which goes at the end of the linked
# list, and the inherited dictionary is updated with the new key/value pair. # list, and the inherited dictionary is updated with the new key/value pair.
if key not in self: if key not in self:
@ -64,6 +71,7 @@ class OrderedDict(dict, MutableMapping):
dict.__setitem__(self, key, value) dict.__setitem__(self, key, value)
def __delitem__(self, key): def __delitem__(self, key):
'od.__delitem__(y) <==> del od[y]'
# Deleting an existing item uses self.__map to find the link which is # Deleting an existing item uses self.__map to find the link which is
# then removed by updating the links in the predecessor and successor nodes. # then removed by updating the links in the predecessor and successor nodes.
dict.__delitem__(self, key) dict.__delitem__(self, key)
@ -72,6 +80,7 @@ class OrderedDict(dict, MutableMapping):
link.next.prev = link.prev link.next.prev = link.prev
def __iter__(self): def __iter__(self):
'od.__iter__() <==> iter(od)'
# Traverse the linked list in order. # Traverse the linked list in order.
root = self.__root root = self.__root
curr = root.next curr = root.next
@ -80,6 +89,7 @@ class OrderedDict(dict, MutableMapping):
curr = curr.next curr = curr.next
def __reversed__(self): def __reversed__(self):
'od.__reversed__() <==> reversed(od)'
# Traverse the linked list in reverse order. # Traverse the linked list in reverse order.
root = self.__root root = self.__root
curr = root.prev curr = root.prev
@ -88,6 +98,7 @@ class OrderedDict(dict, MutableMapping):
curr = curr.prev curr = curr.prev
def __reduce__(self): def __reduce__(self):
'Return state information for pickling'
items = [[k, self[k]] for k in self] items = [[k, self[k]] for k in self]
tmp = self.__map, self.__root tmp = self.__map, self.__root
del self.__map, self.__root del self.__map, self.__root
@ -109,6 +120,10 @@ class OrderedDict(dict, MutableMapping):
__ne__ = MutableMapping.__ne__ __ne__ = MutableMapping.__ne__
def popitem(self, last=True): def popitem(self, last=True):
'''od.popitem() -> (k, v), return and remove a (key, value) pair.
Pairs are returned in LIFO order if last is true or FIFO order if false.
'''
if not self: if not self:
raise KeyError('dictionary is empty') raise KeyError('dictionary is empty')
key = next(reversed(self)) if last else next(iter(self)) key = next(reversed(self)) if last else next(iter(self))
@ -116,21 +131,31 @@ class OrderedDict(dict, MutableMapping):
return key, value return key, value
def __repr__(self): def __repr__(self):
'od.__repr__() <==> repr(od)'
if not self: if not self:
return '%s()' % (self.__class__.__name__,) return '%s()' % (self.__class__.__name__,)
return '%s(%r)' % (self.__class__.__name__, self.items()) return '%s(%r)' % (self.__class__.__name__, self.items())
def copy(self): def copy(self):
'od.copy() -> a shallow copy of od'
return self.__class__(self) return self.__class__(self)
@classmethod @classmethod
def fromkeys(cls, iterable, value=None): def fromkeys(cls, iterable, value=None):
'''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S
and values equal to v (which defaults to None).
'''
d = cls() d = cls()
for key in iterable: for key in iterable:
d[key] = value d[key] = value
return d return d
def __eq__(self, other): def __eq__(self, other):
'''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive
while comparison to a regular mapping is order-insensitive.
'''
if isinstance(other, OrderedDict): if isinstance(other, OrderedDict):
return len(self)==len(other) and \ return len(self)==len(other) and \
all(_imap(_eq, self.iteritems(), other.iteritems())) all(_imap(_eq, self.iteritems(), other.iteritems()))