Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #81859
| From | Gregory Ewing <greg.ewing@canterbury.ac.nz> |
|---|---|
| Newsgroups | comp.lang.python |
| Subject | Re: PyEval_GetLocals and unreferenced variables |
| Date | 2014-12-04 01:28 +1300 |
| Message-ID | <ce8dv5Fm877U1@mid.individual.net> (permalink) |
| References | <mailman.70.1417604405.15533.python-list@python.org> <mailman.16527.1417605559.18130.python-list@python.org> |
Kasper Peeters wrote: > That may have been the design plan, but in Python 2.7.6, I definitely > am able to inject locals via PyEval_GetLocals() and have them be visible > both from the C and Python side; What seems to be happening is that the dict created by PyEval_GetLocals() is kept around, so you can change it and have the changes be visible through locals() in Python. However, that doesn't create a local *name* that's visible from Python. Or if the local name exists, changes made through locals() aren't reflected in the value of the local name. Existing local name is not changed: >>> def f(): ... a = 42 ... locals()['a'] = 17 ... print a ... >>> f() 42 Can't create a local name: >>> def g(): ... locals()['a'] = 17 ... print a ... >>> g() Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 3, in g NameError: global name 'a' is not defined Changes to locals() persist: >>> def h(): ... locals()['a'] = 17 ... print locals()['a'] ... >>> h() 17 -- Greg
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Re: PyEval_GetLocals and unreferenced variables Kasper Peeters <kasper@phi-sci.com> - 2014-12-03 11:18 +0000
Re: PyEval_GetLocals and unreferenced variables Gregory Ewing <greg.ewing@canterbury.ac.nz> - 2014-12-04 01:28 +1300
Re: PyEval_GetLocals and unreferenced variables Ian Kelly <ian.g.kelly@gmail.com> - 2014-12-04 08:42 -0700
csiph-web