Python3 exec locals - this must be a FAQ
Terry Reedy
tjreedy at udel.edu
Tue Feb 12 10:50:11 EST 2013
On 2/12/2013 8:27 AM, Dave Angel wrote:
> On 02/12/2013 06:46 AM, Helmut Jarausch wrote:
>> I've tried but didn't find an answer on the net.
You should start with the fine manual, which is on the net as well as
included with at least the Windows distribution. It has a nice index
that includes an entry for locals (built-in function).
>> The exec function in Python modifies a copy of locals() only.
>> How can I transfer changes in that local copy to the locals of my
>> function
>> ** without ** knowing the names of these variables.
You cannot. Just accept that.
>> E.g. I have a lot of local names.
>>
>> Doing
>>
>> _locals= locals()
This merely gives you a handle of the dict returned by locals() for when
you want to do more than just pass it to (for example) exec). This is
unusual because it is not very useful.
> This doesn't copy everything.
I have no idea what you mean. The locals() dict contains all local and
nonlocal names, excluding global names, which are in the globals() dict.
>> expr=compile(input('statements assigning to some local variables '),
>> 'user input','exec')
>> exec(expr,globals(),_locals)
>>
>> How can I "copy" the new values within _locals to my current locals.
>>
>> If I knew that Var1 has changed I could say
>> Var1 = _locals['Var1'] but what to do in general?
If you want to put a value back into the function local namespace, this
is the only thing you can do. In CPython, at least, all function local
names must be explicit and known when the function statement is executed
and the function object is created. Read the Library manual entry for
locals(), including the highlighted note.
> locals()["Var1"] = _locals["Var1"] will set the same Var1 local.
Huh??? The dict returned by this locals call is the same dict returned
by the previous locals call and bound to _locas. So the above does
nothing. It is the same thing as _locals["Var1"] = _locals["Var1"].
--
Terry Jan Reedy
More information about the Python-list
mailing list