Chris Rebert a écrit :
On Sun, Sep 27, 2009 at 8:53 PM, pylearner <for_pyt...@yahoo.com> wrote:
<snip>
-------------------------------------------------------------------
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
toss_winner()
File "C:/Python26/toss_winner.py", line 7, in toss_winner
coin_toss = coin_toss()
UnboundLocalError: local variable 'coin_toss' referenced before
assignment
---------------------------------------------------------------
# toss_winner.py
from coin_toss import coin_toss
def toss_winner():
coin_toss = coin_toss()
When Python sees this assignment to coin_toss as it compiles the
toss_winner() function, it marks coin_toss as a local variable and
will not consult global scope when looking it up at runtime
(snip)
To fix the problem, rename the variable so its name differs from that
of the coin_toss() function.
(snip)
<OP>
As an additional note: in Python, everything is an object - including
modules, classes, and, yes, functions -, so there's no distinct
namespace for functions or classes. If you try to execute the "coin_toss
= coin_toss()" statement at the top level (or declare name 'coin_toss'
global prior using it in the toss_winner function), you wouldn't get an
UnboundLocalError, but after the very first execution of the statement
you would probably get a TypeError on subsquent attempts to call coin_toss:
>>> def coin_toss():
... print "coin_toss called"
... return 42
...
>>> coin_toss
<function coin_toss at 0x952517c>
>>> coin_toss = coin_toss()
coin_toss called
>>> coin_toss
42
>>> coin_toss()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>>
</OP>
HTH
--
http://mail.python.org/mailman/listinfo/python-list