I have the following code in Python, which uses pyjexl
module:
import pyjexljexl = pyjexl.JEXL()jexl.add_transform("lowercase", lambda x: str(x).lower())
I want to do the same using Python C API. Something like this:
Py_Initialize();PyObject* pyjexlModule = PyImport_ImportModule("pyjexl");PyObject* jexl = PyObject_CallMethod(pyjexlModule, "JEXL", NULL);const char* myLambda = "lambda x: str(x).lower()";PyObject* lambda = ... /* something using myLambda */PyObject_CallMethod(jexl, "add_transform", "sO", "lowercase", lambda);
(Simplified version of the code, e.g., NULL
checking and Py_XDECREF()
have been omitted)
The problem I'm trying to solve is how to get a PyObject
representing a lambda function which Python code is contained in the C-string myLambda
.
How can I achieve this?
I have tried with the suggestion by @DavidW using this:
PyObject* globals = PyDict_New();PyObject* locals = PyDict_New();PyObject* lambda = PyRun_String(myLambda, Py_eval_input, globals, locals);
But I think it's not working, as the resulting lambda
variable (inspected using debugger) is of type PyNone
: