Thank you for the elaboration, Chris! I don't have the background to follow
your example code. However, between your summary of the code, and the code
examples themselves, I have enough info to get a glimpse of what you're
explaining. Also, I can use the info as a foundation for further study on the
matter.
Thanks too for the feedback about the "list." I'm using a combination of yahoo
email (to and from the mailing list) and Google Groups, until I figure out
which works best. Using a Usenet newsreader client is not an option for me at
this point.
Martin
--- On Mon, 9/28/09, Chris Kaynor wrote:
From: Chris Kaynor
Subject: Re: UnboundLocalError - (code is short & simple)
To: python-list@python.org
Date: Monday, September 28, 2009, 4:00 PM
On Sun, Sep 27, 2009 at 10:39 PM, New User wrote:
Hi Chris,
Thank you for the reply and info!
Re: "from coin_toss import coin_toss"
My understanding is that this line makes the coin_toss() function in the
coin_toss.py file available to the toss_winner() function. Is that what your
explanation on this point meant (i.e. "... and sets the
local variable coin_toss to the value of coin_toss in the module coin_toss")?
That is the effect of the statement, however there are cases when the from
coin_toss import coin_toss may result in a different value in the module. This
is because:
from coin_toss import coin_tosseffectively does:import coin_tosscoin_toss =
coin_toss.coin_toss
While this normally works as intended, it can have some unexpected effects.
Take, for example:
-ALPHA.PY-from gamma import testimport betaimport gamma
test = 2gamma.test = 3print gamma.testprint test
print beta.testprint beta.gamma.test
-BETA.PYfrom gamma import testimport gamma
GAMMA.PY---
test = 1
With this setup, you'll get the output:>>> import Test.alpha321
3
If, however, you change gamma to read:test = ['1']
and the lines in alpha:
test = 2gamma.test = 3
to read:
test.append('2')gamma.test.append('3')
you'll get:
>>> import Test.alpha['1', '2', '3']['1', '2', '3']['1', '2', '3']['1', '2',
>>> '3']
As this shows, the "from MODULE import VALUE" method rebinds the varible from
another module in the local scope, and thus does:import MODULE
VALUE = MODULE.VALUEdel MODULE
This means that for some types, the value in MODULE and the value in the local
scope may not be the same and other times they may be the same.
For your purposes, you'll notice no real difference. However this is something
to keep in mind.
Re: "... within a function, a different namespace exists ", and "... you
may want to look into the global keyword ."
Ok, I will read up on these. Thank you for the tips!
Martin
P..S. I didn't see your reply to my post in the comp.lang.python Google
Groups. I assume you emailed your reply directly to me. I also assume you're
not looking for my response in comp.lang.python Google Groups. This is my
first time posting, so I'm not sure what the "posting-reply" conventions are.
It should have shown up on the python list - I just forgot to remove you from
it (I used G-Mail's reply all). In general, unless the reply is off-topic or
personal, it should be replied to on-list. This allows more people to both see
the answer and to help further explain the answer.
--- On Mon, 9/28/09, Chris Kaynor wrote:
From: Chris Kaynor
Subject: Re: UnboundLocalError - (code is short & simple)
To: "pylearner"
Cc: python-list@python.org
Date: Monday, September 28, 2009, 4:17 AM
Lets look at what is happening on a few of the lines here:
First:from coin_toss import coin_toss
imports the module coin_toss and sets the local variable coin_toss to the value
of coin_toss in the module coin_toss.
Second:
coin_toss = coin_toss()
calls the function bound to the name coin_toss and assigns the result to
coin_toss. Now this appears to be what you want (and run outside a function it
would work as you intend, the first time). However, within a function, a
different namespace exists, and Python sees that you are assigning to
coin_toss, and thus uses the local version of that variable everywhere else
within the function. As such, Python is attempting to call the
local variable coin_toss, which has not yet been assigned too.
While not really the "correct" solution, you may want to look into the
global keyword for more information about your problem.
Chris
On Sun, Sep 27, 2009 at 8:53 PM, pylearner wrote:
Python version = 2.6.1
IDLE
Computer = Win-XP, SP2 (current with all windows updates)
---
Greeti