Make a generator from a recursive function
James Stroud
jstroud at mbi.ucla.edu
Fri Dec 9 22:49:47 EST 2005
Alex Martelli wrote:
> James Stroud <jstroud at mbi.ucla.edu> wrote:
> ...
>
>>This was my answer to the thread "new in programing":
>>
>>def do_something(*args):
>> print args
>>
>>def do_deeply(first, depth, lim, doit=True, *args):
>> if depth < lim:
>> do_deeply(first+1, depth+1, lim, False, *args)
>> if first <= depth:
>> do_deeply(first+1, depth, lim, True, *args + (first,))
>> elif doit:
>> do_something(*args)
>>
>>do_deeply(first=1, depth=3, lim=4)
>>
>>I thought it was a good answer, but I think better would be a generator. Is
>>there a straightforward way to make such a function a generator, or does it
>
>
> I'm not entirely sure what you mean, but I will guess it's something not
> too different from...:
>
> def do_deeply(first, depth, lim, doit=True, *args):
> if depth < lim:
> for x in do_deeply(first+1, depth+1, lim, False, *args):
> yield x
> if first <= depth:
> for x in do_deeply(first+1, depth, lim, True, *args + (first,)):
> yield x
> elif doit:
> yield args
>
> to be used with
>
> for x in do_deeply(first=1, depth=3, lim=4):
> do_something(*x)
>
>
> Did I guess right...?
>
>
> Alex
Yes, that's what I was thinking. Thank you.
More information about the Python-list
mailing list