On Wed, 5 Aug 2009 03:06 pm Nick Daly wrote: > The problem actually lies in the contract. Generally, the PyContract > shouldn't affect the return values or in any way modify the code, which > it doesn't, as long as the function returns a list values (the way the > code had in fact originally been written). However, the contract > mentioned above is actually quite wrong for a generator.
Yes, because you are conflating the items yielded from the generator with the generator object returned from the generator function "find_files". You can't look inside the generator object without using up whichever items you look at. [...] > Correcting the above example involves doing nothing more than > simplifying the contract: > > post: > name in __return__ That can't be right, not unless PyContract is doing something I don't expect. I expect that would be equivalent of: 'fish' in <generator object> which should fail: >>> __return__ = find_files('fish') # a generator object >>> 'fish' in __return__ False >>> >>> __return__ = find_files('fish') >>> __return__ = list(__return__) >>> 'fish' in __return__ False >>> __return__ ['one fish', 'two fish', 'red fish', 'blue fish'] Of course, I may be mistaking what PyContract is doing. -- Steven -- http://mail.python.org/mailman/listinfo/python-list