Aug-02-2017, 09:06 PM
So it's kind of like the dict's
What about something like this, wrapped up in a module so NoDefault is namespaced correctly?
.get()
method, except it also .pop()'s the index?What about something like this, wrapped up in a module so NoDefault is namespaced correctly?
>>> NoDefault = (None, ) >>> class DefaultList(list): ... def _pop_default(self, index=0, default_value=NoDefault): ... try: ... value = self._pop_original(index) ... return value ... except IndexError as err: ... if default_value is not NoDefault: ... return default_value ... raise err ... def __init__(self, *args, **kwargs): ... super().__init__(*args, **kwargs) ... self._pop_original = self.pop ... self.pop = self._pop_default ... >>> items = DefaultList(["spam", "eggs", "foo", "bar"]) >>> items ['spam', 'eggs', 'foo', 'bar'] >>> items[3] 'bar' >>> items.pop() 'spam' >>> items ['eggs', 'foo', 'bar'] >>> items.pop(1) 'foo' >>> items ['eggs', 'bar'] >>> items.pop(5, "default") 'default' >>> items.pop(5, None) >>> items.pop(5) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 9, in _default_pop File "<stdin>", line 4, in _default_pop IndexError: pop index out of range >>> items ['eggs', 'bar']