renaming 'references' to functions can give recursive problems

peter Peter.Vandersteegen at gmail.com
Wed Feb 16 11:58:34 EST 2005


Hello, nice solution:
but it puzzles me :)

can anyone tell me why
-----------correct solution----------------
def fA(input):
  return input

def newFA(input, f= fA):
   return f(input)

fA = newFA

is correct and:
-------------infinite loop-----------------

def fA(input):
  return input

def newFA(input):
   return fA(input)

fA = newFA

gives an infinite recursive loop?

kind regards

Peter

Antoon Pardon wrote:
> Op 2005-02-16, peter schreef <Peter.Vandersteegen at gmail.com>:
> > Hello all,
> >
> > Recently I've started to refactor my code ...(I'm using python
2.3.4)
> > I tried to add extra functionality to old functions
non-intrusively.
> > When I used a construct, which involves renaming functions etc... I
> > came across some recursive problems.  (a basic construct can be
found
> > under the section BASIC CODE)
> >
> > These problems do not occur when renaming objects.  (see section
EXTRA
> > CODE)
> > My question now is:
> > I do not know the underlying idea of functions.  Is this the way
they
> > should behave? Or should they work the same way as objects do?
> > (My preferences goes to this last option)
> >
> > BASIC CODE:
> >
---------------------------------------------------------------------------
> > def fA(input): # starting point: function named fA
> >     return input
> >
> > def newFA(input): # new function with added functionality
> >     #does something extra with a!
> >     return fA(input)
> > fA = newFA
> >      # this should allow to add functionality without
> >      # breaking older code which uses the name fA!
> > fA() # execute fA()
>
> Try this:
>
> def fA(input):
>   return input
>
>
> def newFA(input, f= fA):
>   return f(input)
> 
> fA = newFA
> 
> -- 
> Antoon Pardon




More information about the Python-list mailing list