Manlio Perillo NOmanlio_perilloSPAM at
Fri Oct 1 19:30:05 CEST 2004

On Thu, 30 Sep 2004 18:28:30 GMT, Andrew Dalke <adalke at>

>>>Try this as a alternate solution for your style
>>>of use.  It's still not the right one because it
>>>doesn't handle reloads nor multiple functions
>>>created through exec's.
>Manlio Perillo wrote:
>> No, I don't want this. "Hello!" should be printed every times.
>I see.  I was writing code to emulate C's "static" behaviour
>which is not what you wanted.

It's my fault.
It is long time I'm not using C++ that I forgot that static variable
function initialization is done once during program.
However firstlevel_call is what I want.

>> Here is a functions that returns True if the caller's 'recursion
>> depth' is 1.
>> Please check if this is correct.
>>>>>def firstlevel_call():
>>        return sys._getframe(1).f_code != sys._getframe(2).f_code
> > N.B.: sys._getframe(2) can raise an exception
>Looks like it should work, and be thread-safe.  Again,
>I don't suggest using it.  It's going to be slower than
>one where you use pass the stack depth in as a parameter.
>It's also going to depend on implmentation behaviour.
>Someday a Python system may not instantiate the stack
>information until it's requested, causing a big run-time
>hit.  But that's only theoretical.

Ok. Thanks

>> Sorry, I don't understand.
>> Here is my_function:
>> def my_function(a, b, *args, **kwargs):
>> 	print 'a, b, args, kwargs:', a, b, args, kwargs
>That's not recursive, so I don't know how to
>interpret your question.  

This is only the function signature!
The problem is that I can't do:

def my_function(a, b, *args, **kwargs, __max_depth = 4): ...

The only way is to do:
def my_function(a, b, max_depth = 4, *args, **kwargs): ...

But in this way max_depth is 'exposed' to public.
In the first example it is private.

>Let's suppose you're
>doing Ackermann's function
>def Ackermann(m, n):
>     if m == 0:
>         return n+1
>     if n == 0:
>         return Ackermann(m-1, 1)
>     return Ackermann(m-1, Ackermann(m, n-1))

What's the purpose of such a function?

Thanks and regards  Manlio Perillo

More information about the Python-list mailing list