Python for ios interpreter
Question: > **Possible Duplicate:**  
>  [Python or Ruby Interpreter on
> iOS](http://stackoverflow.com/questions/4772591/python-or-ruby-interpreter-
> on-ios)

I just discovered this apps
[pypad](http://users.on.net/~jon.dowdall/pypad/index.html) and [python for
ios](http://pythonforios.com/)

They have like an interpreter an editor

So which app would you recomend

But most importantly, how does this interpreter work, and where can i see an
example of how the obj c and python get to work togheter?

Thanks!


Answer: I am the sole creator of [Python for iOS](http://pythonforios.com) so that is
of course what I would recommend, but a good indicator for your personal
decision is the reviews & ratings of each App. It took me weeks to figure out
how to properly integrate python into Objective-c for this App but here is the
best resource to get you started (keep in mind that ObjC is just a superset of
C):

<http://docs.python.org/c-api/>

* * *

Also, here is an example of calling a function defined in `myModule`. The
equivient python would be:

    
    
    import myModule
    pValue = myModule.doSomething()
    print pValue
    

In Objective-c:

    
    
    #include <Python.h>
    
    - (void)example {
    
        PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pValue;
        NSString *nsString;
    
        // Initialize the Python Interpreter
        Py_Initialize();
    
        // Build the name object
        pName = PyString_FromString("myModule");
    
        // Load the module object
        pModule = PyImport_Import(pName);
    
        // pDict is a borrowed reference 
        pDict = PyModule_GetDict(pModule);
    
        // pFunc is also a borrowed reference 
        pFunc = PyDict_GetItemString(pDict, "doSomething");
    
        if (PyCallable_Check(pFunc)) {
            pValue = PyObject_CallObject(pFunc, NULL);
            if (pValue != NULL) {
                if (PyObject_IsInstance(pValue, (PyObject *)&PyUnicode_Type)) {
                        nsString = [NSString stringWithCharacters:((PyUnicodeObject *)pValue)->str length:((PyUnicodeObject *) pValue)->length];
                } else if (PyObject_IsInstance(pValue, (PyObject *)&PyBytes_Type)) {
                        nsString = [NSString stringWithUTF8String:((PyBytesObject *)pValue)->ob_sval];
                } else {
                        /* Handle a return value that is neither a PyUnicode_Type nor a PyBytes_Type */
                }
                Py_XDECREF(pValue);
            } else {
                PyErr_Print();
            }
        } else {
            PyErr_Print();
        }
    
        // Clean up
        Py_XDECREF(pModule);
        Py_XDECREF(pName);
    
        // Finish the Python Interpreter
        Py_Finalize();
    
        NSLog(@"%@", nsString);
    }
    

For much more documentation check out: [Extending and Embedding the Python
Interpreter](http://docs.python.org/extending/)

