[Python-ideas] Cofunctions/yield from -> fibers
Scott Dial
scott+python-ideas at scottdial.com
Fri Aug 13 08:52:47 CEST 2010
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.
--
Scott Dial
scott at scottdial.com
scodial at cs.indiana.edu
More information about the Python-ideas
mailing list