[Python-ideas] Adding a thin wrapper class around the functions in stdlib.heapq

Sven R. Kunze srkunze at mail.de
Tue Nov 21 17:16:43 EST 2017


Maybe, that suffices: https://pypi.python.org/pypi/xheap


On 21.11.2017 03:46, bunslow wrote:
> Perhaps such repetition is a sign that *something* needs to be done...
>
> Thanks for the link though. I'm new enough to the community that it 
> didn't even occur to me to search for prior discussions.
>
> On Mon, Nov 20, 2017 at 8:38 PM, Sebastian Kreft <skreft at gmail.com 
> <mailto:skreft at gmail.com>> wrote:
>
>     This has been brought up multiple times. Last time was on this
>     thread
>     https://mail.python.org/pipermail/python-ideas/2016-October/043024.html
>     <https://mail.python.org/pipermail/python-ideas/2016-October/043024.html>.
>
>     On Tue, Nov 21, 2017 at 3:13 AM, bunslow <bunslow at gmail.com
>     <mailto:bunslow at gmail.com>> wrote:
>
>         Nothing so bombastic this time. The heapq functions are
>         basically all named "heapsomething", and basically all take a
>         "heap" for their first argument, with supplementary args
>         coming after. It's a textbook example of the (hypothetical)
>         Object Oriented Manifesto™ where defining a class increases
>         type safety and programmers' conceptual clarity. There're
>         practically no drawbacks, and the code to be added would be
>         very simple. Updating the tests and docs would probably be
>         harder.
>
>         In pure Python, such a class would look like this:
>
>         class Heap(list):
>
>             def __init__(self, iterable=None):
>                 if iterable:
>                     super().__init__(iterable)
>                 else:
>                     super().__init__()
>
>                 self.heapify()
>
>             push = heapq.heappush
>             pop = heapq.heappop
>             pushpop = heapq.heappushpop
>             replace = heapq.heapreplace
>             heapify = heapq.heapify
>
>             # This could be a simple wrapper as well, but I had the
>         following thoughts anyways, so here they are
>             def nsmallest(self, n, key=None):
>                 # heapq.nsmallest makes a *max* heap of the first n
>         elements,
>                 # while we know that self is already a min heap, so we can
>                 # make the max heap construction faster
>                 self[:n] = reversed(self[:n])
>                 return heapq.nsmallest(n, self, key)
>
>             # do we define nlargest on a minheap??
>
>
>         Wrapping around the C builtin functions (which aren't
>         descriptors) would be a bit harder, but not much so:
>
>         from functools import partial
>
>         class Heap(list):
>             def __init__(self, iterable=None):
>                 if iterable:
>                     super().__init__(iterable)
>                 else:
>                     super().__init__()
>
>                 self.heapify = partial(heapq.heapify, self)
>                 self.push = partial(heapq.heappush, self)
>                 ...
>
>                 self.heapify()
>
>
>         Thoughts?
>
>         _______________________________________________
>         Python-ideas mailing list
>         Python-ideas at python.org <mailto:Python-ideas at python.org>
>         https://mail.python.org/mailman/listinfo/python-ideas
>         <https://mail.python.org/mailman/listinfo/python-ideas>
>         Code of Conduct: http://python.org/psf/codeofconduct/
>         <http://python.org/psf/codeofconduct/>
>
>
>
>
>     -- 
>     Sebastian Kreft
>
>
>
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20171121/a4a8327d/attachment-0001.html>


More information about the Python-ideas mailing list