inner methods and recursion

Steve Howell showell30 at yahoo.com
Mon Jan 18 21:55:58 EST 2010


On Jan 18, 6:07 pm, "Gabriel Genellina" <gagsl-... at yahoo.com.ar>
wrote:
> En Mon, 18 Jan 2010 19:00:17 -0300, Steve Howell <showel... at yahoo.com>  
> escribió:
>
> > Hi, I have a style/design question relating to recursion and inner
> > methods.
>
> > I wrote some code recently that implements a recursive algorithm that
> > takes several parameters from the original caller.  Once the algorithm
> > starts running and recursing, those parameters remain the same, so I
> > define an inner method called "recurse" that essentially curries those
> > parameters.  In particular, the recurse method can get passed to a
> > callback method that the caller supplies, so that the caller can wrap
> > the recursive step with their own logic.
>
> Python already have lexical scoping, you can take advantage of it. On any  
> non-prehistoric version of Python you may write:
>
> def indent_lines(lines,
>              branch_method,
>              leaf_method,
>              pass_syntax,
>              flush_left_syntax,
>              flush_left_empty_line,
>              indentation_method,
>              get_block,
>              ):
>
>      def _indent_lines(lines):
>        output = []
>        while lines:
>          # ... the real work ...
>          # recursive call:
>          output += branch_method(prefix, block, _indent_lines)
>        return output
>
>      return _indent_lines(lines)
>
> The real work happens inside _indent_lines, and it has access to the outer  
> indent_lines scope, where all remaining parameters are defined.
>
> > The only thing I don't like about the technique that I'm using is that
> > it seems needlessly repetitive to define mostly the same parameter
> > list in two different places.  The repetition seems mostly harmless,
> > but it seems like some kind of a smell that I'm overlooking a simpler
> > way to write the code.  I just can't put my finger on what it is.
>
> Is the above technique what you were looking for?
>

That was exactly what I was looking for.  I just tried it out, and it
works perfectly. Thanks!




More information about the Python-list mailing list