Thanks for the light you shed on the "namespace" issue, and for the additional info and code example. I'll be studying more about the info you shared. Also, I tried out your code example, to get firsthand experience with it.
Cheers, Martin --- On Mon, 9/28/09, Bruno Desthuilliers <bruno.42.desthuilli...@websiteburo.invalid> wrote: From: Bruno Desthuilliers <bruno.42.desthuilli...@websiteburo.invalid> Subject: Re: UnboundLocalError - (code is short & simple) To: python-list@python.org Date: Monday, September 28, 2009, 8:24 AM 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
-- http://mail.python.org/mailman/listinfo/python-list