On Thu, Aug 12, 2010 at 11:52 PM, Scott Dial email@example.com wrote:
On 8/13/2010 1:35 AM, Nick Coghlan wrote:
On Fri, Aug 13, 2010 at 3:07 PM, geremy condra firstname.lastname@example.org 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.