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

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to