Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Python > Re: Python3 exec locals - this must be a FAQ

Reply
Thread Tools

Re: Python3 exec locals - this must be a FAQ

 
 
Dave Angel
Guest
Posts: n/a
 
      02-12-2013
On 02/12/2013 10:50 AM, Terry Reedy wrote:
> On 2/12/2013 8:27 AM, Dave Angel wrote:
>> On 02/12/2013 06:46 AM, Helmut Jarausch wrote:

>
>>> <snip>
>>>
>>> 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.


The OP presumably wanted to restore the original values of the original
variables. The above "assignment" won't help a bit with that.


>
> 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"].
>


My claim was based on the assumption that the earlier assignment had
been fixed by some kind of copy. If not, there's nothing to restore.

I also retracted my use of that trick anyway, since being corrected by
MRAB. I only tested it in top-level code, not inside a function.


--
DaveA
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: Python3 exec locals - this must be a FAQ Dave Angel Python 2 02-13-2013 12:05 AM
Re: Python3 exec locals - this must be a FAQ Terry Reedy Python 0 02-12-2013 03:50 PM
Re: Python3 exec locals - this must be a FAQ MRAB Python 0 02-12-2013 03:15 PM
exec "statement" VS. exec "statement in globals(), locals() Ted Python 1 07-22-2004 08:51 AM
exec "statement" VS. exec "statement" in globals(), locals() tedsuzman Python 2 07-21-2004 08:41 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57