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