PyEval_GetLocals and unreferenced variables

Kasper Peeters kasper at phi-sci.com
Wed Nov 26 11:22:57 CET 2014


I have a question about PyEval_GetLocals(). The normal behaviour of
PyEval_GetLocals(), and in fact of the locals() function in Python
itself, is to return a list which includes only those variables which
are actually referenced in the local scope. Example:

  def fun():
     q=3
     def fun2():
        print(locals())
     fun2()

  fun()

will print "{}" because "q" has not been referenced in fun2(). On the
other hand, if you do

  def fun():
     q=3
     def fun2():
	print(q)
        print(locals())
     fun2()

  fun()

you will instead get "{'q': 3}" as output. All fine and understood.

My question: I want to call a C function inside fun2(), which I want to
give access to the 'q' variable in the fun() scope, _without_ there
being any reference to 'q' in the python code itself. That is, I want
to do:

  def fun():
     q=3
     def fun2():
	cfun()
     fun2()

  fun()

and access 'q' inside the C-function cfun(). If I simply let it call
PyEval_GetLocals, then the result will again not contain "q". Is there
any way in which I can convince python to pull 'q' into the local scope
from within my C code?

Thanks!

Cheers,
Kasper



More information about the Python-list mailing list