On May 1, 10:58 pm, [EMAIL PROTECTED] wrote: > def fibonacci(n): > latest, i = (1, 1), 2 > if n < 1: > raise ValueError # raise exception > while i < n: > latest = (latest[1], latest[0] + latest[1]) > yield # cooperative yield > raise StopIteration(latest[1]) # return value
There is an infinite loop here! > def fibsquared(n): > try: > fibn = (yield fibonacci(n)) ** 2 # function call > except ValueError: # catch exception > print "Sorry, cannot calculate fibsquared of", n > else: > print "fibsquared of", n, "is", fibn It is not clear to me if you mean here F(yield <genobj>) as a a shortcut for for el in <genobj>: yield F(el) In other words, is ``fibsquared(n).next()`` should return a value or a generator object?? BTW, in spite of having a great tradition, the Fibonacci example sucks as a motivation for microthreading programming. You could show a simple state machine instead. Michele Simionato -- http://mail.python.org/mailman/listinfo/python-list