Hi List, look at the following code:
def evens(): # iterator returning even numbers i = 0 while True: yield i i += 2 # now get all the even numbers up to 15 L = [n for n in evens() if n < 15] Isn't it strange, that this code runs (in a lazy language) for eternity? I would expect python to to spit out (in no time): >> L [0, 2, 4, 6, 8, 10, 12, 14] after 14 it is not nessesary to evaluate evens() any further. I really started to ask myself if python really is lazy, but everything else I wrote in lazy style still worked. Example: >> def test(txt, retval): .. print(txt) .. return retval .. >>> test(1, True) or test(2, True) 1 True >>> test(1, True) and test(2, True) 1 2 True Can anybody explain what happens with evens()? best regards Erik Bernoth PS: The code comes from a list post from 2006. You find it here: http://mail.python.org/pipermail/python-list/2006-November/585783.html
-- http://mail.python.org/mailman/listinfo/python-list