[Python-ideas] Cofunctions/yield from -> fibers

geremy condra debatem1 at gmail.com
Fri Aug 13 09:59:54 CEST 2010


On Thu, Aug 12, 2010 at 11:52 PM, Scott Dial
<scott+python-ideas at scottdial.com> wrote:
> On 8/13/2010 1:35 AM, Nick Coghlan wrote:
>> On Fri, Aug 13, 2010 at 3:07 PM, geremy condra <debatem1 at gmail.com> wrote:
>>> I won't pretend to understand the current discussion or its
>>> motivation, but I know I would appreciate it if examples of the
>>> obvious-and-straightforward variety were added.
>>
>> Yes, it would be nice if PEP 380's generator delegation forest didn't
>> get lost in the cofunction trees :)
>
> Yes, I think even something as trivial as an example in-order iteration
> over a binary tree should be included since it is accessible and the
> benefits of readability, efficiency, and correctness are apparent:
>
> class BinaryTree:
>    def __init__(self, left=None, us=None, right=None):
>        self.left = left
>        self.us = us
>        self.right = right
>
>    def __iter__(self):
>        if self.left:
>            yield from self.left
>        if self.us:
>            yield self.us
>        if self.right:
>            yield from self.right
>
> You can point out that "yield from" prevents a recursion depth problem
> while also being agnostic to whether left/right is also a BinaryTree
> object (e.g., a tuple or list or some other user-defined type works just
> as well as an iterable leaf) -- a feat that would be rather complicated
> and verbose otherwise. As a bonus, the run-time of such an iteration is
> faster due to the flattening optimization that is only possible with
> special syntax.

...aaaaaand sold in one. Thanks for the example.

Geremy Condra



More information about the Python-ideas mailing list