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
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to