
python at mrabarnett
Jun 12, 2012, 11:25 AM
Post #4 of 12
(428 views)
Permalink
|
|
Re: using identifiers before they are defined
[In reply to]
|
|
On 12/06/2012 18:53, Julio Sergio wrote: > I'm puzzled with the following example, which is intended to be a part of a > module, say "tst.py": > > a = something(5) > > def something(i): > return i > > > > When I try: > > ->>> import tst > > The interpreter cries out: > > Traceback (most recent call last): > File "<stdin>", line 1, in<module> > File "tst.py", line 11, in<module> > a = something(5) > NameError: name 'something' is not defined > > I know that changing the order of the definitions will work, however there are > situations in which referring to an identifier before it is defined is > necessary, e.g., in crossed recursion. > > So I modified my module: > > global something > > a = something(5) > > > def something(i): > return i > > > And this was the answer I got from the interpreter: > > ->>> import tst > > Traceback (most recent call last): > File "<stdin>", line 1, in<module> > File "tst.py", line 12, in<module> > a = something(5) > NameError: global name 'something' is not defined > > > Do you have any comments? > In Python, "def" is a statement, not a declaration. It binds the body of the function to the name when the "def" statement is run. A Python script is, basically, run from top to bottom, and both "def" and "class" are actually statements, not declarations. A function can refer to another function, even one that hasn't been defined yet, provided that it has been defined by the time it is called. For example, this: def first(): second() def second(): pass first() is OK because it defines function "first", then function "second", then calls "first". By the time "first" calls "second", "second" has been defined. -- http://mail.python.org/mailman/listinfo/python-list
|