Why this code is working?

Bruno Desthuilliers bruno.42.desthuilliers at websiteburo.invalid
Wed Jan 14 10:02:09 EST 2009


Hussein B a écrit :
> On Jan 14, 11:55 am, Bruno Desthuilliers <bruno.
> 42.desthuilli... at websiteburo.invalid> wrote:
>> Hussein B a écrit :
>>
>>> Hey,
>>> Why this code is working?
>>>>>> def f1( ):
>>> ...      x = 88
>>> ...      f2(x)
>>> ...
>>>>>> def f2(x):
>>> ...      print x
>>> ...
>>>>>> f1( )
>>> 88
>> Well... Because it is correct ?
>>
>> What make you think it _shouldn't_ work ?
> 
> Because def2 is defined after def1 in an interpreted language, not
> compiled.

CPython actually compiles to byte-code, which is then executed.

But anyway: even if it was fully interpreted, the fact that f2 is 
defined after f1 should not matter - what matters is that name f2 exists 
(and is bound to a callable taking a single mandatory argument) when f1 
is actually _called_.

 >>> def f1():
...     x = 42
...     f2(x)
...
 >>> f1()
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "<stdin>", line 3, in f1
NameError: global name 'f2' is not defined
 >>> def f2(x):
...     print x
...
 >>> f1()
42
 >>> def f2(x):
...     print "pikaboo"
...
 >>> f1()
pikaboo
 >>>
 >>> del f2
 >>> f1()
Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
   File "<stdin>", line 3, in f1
NameError: global name 'f2' is not defined
 >>>

HTH






More information about the Python-list mailing list