Kaydet (Commit) a82aa55b authored tarafından Raymond Hettinger's avatar Raymond Hettinger

Minor clean-ups to docstrings, comments, and var names.

üst 6803dc28
...@@ -28,20 +28,20 @@ class OrderedDict(dict): ...@@ -28,20 +28,20 @@ class OrderedDict(dict):
# An inherited dict maps keys to values. # An inherited dict maps keys to values.
# The inherited dict provides __getitem__, __len__, __contains__, and get. # The inherited dict provides __getitem__, __len__, __contains__, and get.
# The remaining methods are order-aware. # The remaining methods are order-aware.
# Big-O running times for all methods are the same as for regular dictionaries. # Big-O running times for all methods are the same as regular dictionaries.
# The internal self.__map dictionary maps keys to links in a doubly linked list. # The internal self.__map dict maps keys to links in a doubly linked list.
# The circular doubly linked list starts and ends with a sentinel element. # The circular doubly linked list starts and ends with a sentinel element.
# The sentinel element never gets deleted (this simplifies the algorithm). # The sentinel element never gets deleted (this simplifies the algorithm).
# The sentinel is stored in self.__hardroot with a weakref proxy in self.__root. # The sentinel is in self.__hardroot with a weakref proxy in self.__root.
# The prev/next links are weakref proxies (to prevent circular references). # The prev/next links are weakref proxies (to prevent circular references).
# Individual links are kept alive by the hard reference in self.__map. # Individual links are kept alive by the hard reference in self.__map.
# 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 '''Initialize an ordered dictionary. The signature is the same as
regular dictionaries, but keyword arguments are not recommended regular dictionaries, but keyword arguments are not recommended because
because their insertion order is arbitrary. their insertion order is arbitrary.
''' '''
if len(args) > 1: if len(args) > 1:
...@@ -58,8 +58,8 @@ class OrderedDict(dict): ...@@ -58,8 +58,8 @@ class OrderedDict(dict):
def __setitem__(self, key, value, def __setitem__(self, key, value,
dict_setitem=dict.__setitem__, proxy=_proxy, Link=_Link): dict_setitem=dict.__setitem__, proxy=_proxy, Link=_Link):
'od.__setitem__(i, y) <==> od[i]=y' '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 at the end of the linked list,
# list, and the inherited dictionary is updated with the new key/value pair. # and the inherited dictionary is updated with the new key/value pair.
if key not in self: if key not in self:
self.__map[key] = link = Link() self.__map[key] = link = Link()
root = self.__root root = self.__root
...@@ -71,8 +71,8 @@ class OrderedDict(dict): ...@@ -71,8 +71,8 @@ class OrderedDict(dict):
def __delitem__(self, key, dict_delitem=dict.__delitem__): def __delitem__(self, key, dict_delitem=dict.__delitem__):
'od.__delitem__(y) <==> del od[y]' '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 gets
# then removed by updating the links in the predecessor and successor nodes. # removed by updating the links in the predecessor and successor nodes.
dict_delitem(self, key) dict_delitem(self, key)
link = self.__map.pop(key) link = self.__map.pop(key)
link_prev = link.prev link_prev = link.prev
...@@ -170,6 +170,11 @@ class OrderedDict(dict): ...@@ -170,6 +170,11 @@ class OrderedDict(dict):
__marker = object() __marker = object()
def pop(self, key, default=__marker): def pop(self, key, default=__marker):
'''od.pop(k[,d]) -> v, remove specified key and return the corresponding
value. If key is not found, d is returned if given, otherwise KeyError
is raised.
'''
if key in self: if key in self:
result = self[key] result = self[key]
del self[key] del self[key]
...@@ -179,7 +184,7 @@ class OrderedDict(dict): ...@@ -179,7 +184,7 @@ class OrderedDict(dict):
return default return default
def setdefault(self, key, default=None): def setdefault(self, key, default=None):
'OD.setdefault(k[,d]) -> OD.get(k,d), also set OD[k]=d if k not in OD' 'od.setdefault(k[,d]) -> od.get(k,d), also set od[k]=d if k not in od'
if key in self: if key in self:
return self[key] return self[key]
self[key] = default self[key] = default
...@@ -208,14 +213,14 @@ class OrderedDict(dict): ...@@ -208,14 +213,14 @@ class OrderedDict(dict):
@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 '''OD.fromkeys(S[, v]) -> New ordered dictionary with keys from S.
and values equal to v (which defaults to None). If not specified, the value defaults to None.
''' '''
d = cls() self = cls()
for key in iterable: for key in iterable:
d[key] = value self[key] = value
return d return self
def __eq__(self, other): def __eq__(self, other):
'''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive '''od.__eq__(y) <==> od==y. Comparison to another OD is order-sensitive
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment