a simple def how-to
Andreas Waldenburger
usenot at geekmail.INVALID
Sun Mar 7 10:23:48 EST 2010
On Sun, 7 Mar 2010 07:05:26 -0800 (PST) vsoler
<vicente.soler at gmail.com> wrote:
> Hello,
>
> My script starts like this:
>
> book=readFromExcelRange('book')
> house=readFromExcelRange('house')
> table=readFromExcelRange('table')
> read=readFromExcelRange('read')
> ...
>
> But I would like to have something equivalent, like...
>
> ranges=['book','house','table','read']
> for i in ranges:
> var[i]=readFromExcelRange(i)
>
> which does not work. I assume I should be using globals() instead of
> var, but I do not know how to write my script.
>
> Can anybody help?
One additional line, and it works (all the following code is untested,
I might have goofed it up somewhere, but you get the idea):
ranges=['book','house','table','read']
var = {}
for i in ranges:
var[i]=readFromExcelRange(i)
Or, more succinctly:
var = dict((i, readFromExcelRange(i)) for i in ranges)
although that looks a bit crowded. Perhaps
rd = readFromExcelRange
var = dict((i, rd(i)) for i in ranges)
looks better, but not by much, IMO.
In Python 3 you can also just say
var = {i:readFromExcelRange(i) for i in ranges}
(I think. I don't have Python 3.) This looks comparatively neat,
because there are no nesting parens.
And just in case you think it's a good idea to meddle with globals and
create actual "variables": it's not. You absolutely want dictionaries
here. It's basically a bad idea to create names *implicitly* that
you're going to use *explicitly*. (That is, it is in Python anyway,
because it does not provide a clean and clear way of doing this. Other
languages might provide that sort of thing, and it might be awesome,
but in Python, no sir.)
/W
--
INVALID? DE!
More information about the Python-list
mailing list