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