>>> 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:
a=yield from self.left
print ('binary: '+str(a))
if self.us:
yield self.us
if self.right:
yield from self.right
>>> def yielder():
while 1:
a=yield 'a'
print ('yielder: '+str(a))
>>> a=BinaryTree(yielder())
>>> b=iter(a)
>>> b
<generator object __iter__ at 0x00F31FD0>
>>> next(b)
'a'
>>> next(b)
yielder: None
'a'
>>> next(b)
yielder: None
'a'
>>> b.send(3)
yielder: 3
'a'
>>> b.send(3)
yielder: 3
'a'
>>> def yielder():
while 1:
a=yield 'a'
print ('yielder: '+str(a))
return 'yielder return'
>>> a=BinaryTree(yielder())
>>> b=iter(a)
>>> next(b)
'a'
>>> next(b)
yielder: None
binary: yielder return
Traceback (most recent call last):
File "<pyshell#36>", line 1, in <module>
next(b)
StopIteration