Namespaces, multiple assignments, and exec()

MRAB google at mrabarnett.plus.com
Fri Dec 19 21:53:16 EST 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)
> 
If you're sure you want to use the current namespace then:

     for name in namelist:
         vars()[name] = func(name, args)



More information about the Python-list mailing list