[Tutor] question about function inside of function

spir denis.spir at free.fr
Sat Jan 9 14:03:09 CET 2010

Richard D. Moores dixit:

> I'm working on a function that seems to cry out for some of its code
> to be put in a function. For convenience sake, I've put this new
> function inside the one that calls it.
> Question 1: Is this bad practice? It works fine that way, but..
> Question 2: If the answer to Q1 is no, is there a standard place to
> put a function inside of another function? Is it standard to have it
> the first line of the function? I've put mine at the point where it
> would be called, mainly as a reminder to myself.
> An outline of the big function is:
> if:
> else:
>      for loop
>          for loop
>              if
>              elif
>                  the function
>                  call the function
>              else
> Thanks,

Do you realize the inner func will be redefined before each call? Meaning in your case n calls x n outer loops x n inner loops.
   def f() ...
is actually a kind of masked assignment
   f = function()...

To avoid polluting the global namespace (if it's what you mean), you can assiattach the inner func as an attribute of the outer: "g.f = f". Unfortunately, it's not possible (I guess), to define it directly using "def g.f()".
Also, if a func logically is an attribute of another, then probably you're close to defined an object, possibly with other attributes. Think at the design of the application.

I may be wrong, but I guess the only common case where you should (and must) define a func inside another is the one of a func factory, ie a func that defines (and returns) a new func:

def makeAdder(val):
    def adder(x):
        return x + adder.val
    adder.val = val
    return adder
add3 = makeAdder(3)
print add3(2)		# --> 5


la vita e estrany


More information about the Tutor mailing list