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

Reply via email to