Recursive function defined within function => NameError
Martin von Loewis
loewis at informatik.hu-berlin.de
Thu Feb 17 07:46:49 EST 2000
Michael Ströder <michael.stroeder at inka.de> writes:
> Can anybody clarify the issue here? I looked in the Language
> Reference and found the hint
You found the right place in the documentation. A function can only
access its own local and the module's global symbols; as a result,
looking for 'fak' gives a NameError.
> Any better solution?
For what problem? Computing the factorial in a local function? Sure:
def func1():
def fak(n):
from operator import mul
if n<=1: return n
return reduce(mul,range(1,n))
print fak(6)
func1()
For defining support functions? Make them global, and prefix them with
an underscore:
def _fak(n):
if n>1:
return n*_fak(n-1)
else:
return n
def func1():
print _fak(6)
func1()
This will prevent anybody importing your module with 'from foo import
*' to accidently overwrite a name; it also makes sufficiently clear
that this function is not intended for general use.
Regards,
Martin
More information about the Python-list
mailing list