Namespaces, multiple assignments, and exec()

John O'Hagan mail at johnohagan.com
Sat Dec 20 16:41:19 CET 2008


On Sat, 20 Dec 2008, Terry Reedy wrote:
> John O'Hagan wrote:
> > I have a lot of repetitive assignments to make, within a generator, that
> > use a function outside the generator:
> >
> > var1 = func("var1", args)
> > var2 = func("var2", args)
> > var3 = func("var3", args)
> > etc...
> >
> > In each case the args are identical, but the first argument is a string
> > of the name being assigned. It works fine but I'd like to reduce the
> > clutter by doing the assignments in a loop. I've tried using exec():
> >
> > for name in name_string_list:
> >     exec(name + ' = func(\"' + name + '\", args)')
> >
> > but in the local namespace it doesn't understand func(), and if I give it
> > globals() it doesn't understand the args, which come from within the
> > generator.
> >
> > What's a good way to do this kind of thing?
>
> Put everything in your own namespace
>
> myvars={}
> for name in namelist:
>    myvars[name]=func(name,args)

Likely I'm missing something, but don't I still have to do

var1 = myvars['var1']
var2 = myvars['var2']
var3 = myvars['var3']
...etc.

to make the assignments?

Regards,

John






More information about the Python-list mailing list