Need help with Python scoping rules
John Posner
jjposner at optimum.net
Tue Aug 25 15:31:48 EDT 2009
7stud said:
> python ignores the names inside a function when it creates the
> function. This "program" will not produce an error:
>
>
> def f():
> print x
>
> python parses the file and creates the function object and assigns the
> function object to the variable f. It's not until you execute the
> function that python will raise an error. The same thing happens with
> the recursive function.
>
Thanks for that explanation. So in the OP's example:
Class Demo(object):
def fact(n):
if n < 2:
return 1
else:
return n * fact(n - 1)
_classvar = fact(5)
... no failure occurs when "fact(5)" is invoked, because the lookup of
"fact" in the local scope is a class-scope-lookup, which succeeds. The
failure occurs on the first recursive invocation of fact() in the
statement "return n * fact(n - 1)": the function-scope-lookup of "fact"
fails, and then the interpreter falls back to a global-scope-lookup of
"fact", which also fails.
More information about the Python-list
mailing list