SlideShare una empresa de Scribd logo
1 de 24
Angel Freire <cuerty@gmail.com> http://blog.cuerty.com/charlas/eacpy PyCon Argentina 2010, Córdoba Extendiendo aplicaciones en C y C++ con Python
Objetivos ,[object Object]
Conocer (un poco) la API que CPython nos brinda para esto
Conocer las opciones para embeber Python en programas escritos en otros lenguajes
¿Porque? ,[object Object]
Las reglas de negocio varían
No es necesario recompilar para agregar una nueva funcionalidad a la aplicación
Para permitirle a los usuarios finales extender fácilmente nuestra aplicación
¿Que es CPython? ,[object Object]
Esta programado en C
Esta disponible para varias plataformas
Se descarga de http://www.python.org
Esta compuesto por dos partes: ,[object Object]
Una biblioteca
¿Que es CPython? El mismo interprete de Python utiliza la biblioteca *. * Algunas distribuciones de Linux, como Ubuntu, eligen compilar el interprete de manera estática, por lo que el mismo no esta linkeado contra la biblioteca.
¿Que es la API de CPython? ,[object Object]
Brinda funcionalidad para: ,[object Object]
Crear objetos
Importar módulos
Manejar excepciones
¡Mas!
Ejemplo #1: Hola Mundo
Ejemplo #1: Hola Mundo
Inicializar y finalizar Antes de llamar a código en Python desde C se llama a  Py_Initialize . Esto se hace para: ,[object Object]

Más contenido relacionado

La actualidad más candente (20)

Articulo Python
Articulo PythonArticulo Python
Articulo Python
 
Clase4_Python-CTIC
Clase4_Python-CTICClase4_Python-CTIC
Clase4_Python-CTIC
 
C++
C++ C++
C++
 
Clase3_Python-CTIC
Clase3_Python-CTICClase3_Python-CTIC
Clase3_Python-CTIC
 
Intro Python
Intro PythonIntro Python
Intro Python
 
2.1 Lenguaje de Programación C y su Entorno
2.1 Lenguaje de Programación C y su Entorno2.1 Lenguaje de Programación C y su Entorno
2.1 Lenguaje de Programación C y su Entorno
 
De Cero A Python En 45 Min
De Cero A Python En 45 MinDe Cero A Python En 45 Min
De Cero A Python En 45 Min
 
Acceder a C desde Python (O viceversa)
Acceder a C desde Python (O viceversa)Acceder a C desde Python (O viceversa)
Acceder a C desde Python (O viceversa)
 
Como usar el lenguaje c++
Como usar el lenguaje c++Como usar el lenguaje c++
Como usar el lenguaje c++
 
Curso python
Curso pythonCurso python
Curso python
 
Decompiladores
DecompiladoresDecompiladores
Decompiladores
 
Python para ingenieros como alternativa a matlab
Python para ingenieros como alternativa a matlabPython para ingenieros como alternativa a matlab
Python para ingenieros como alternativa a matlab
 
Python
PythonPython
Python
 
Instalación python
Instalación pythonInstalación python
Instalación python
 
Taller de Introducción a Scripting con gvSIG
Taller de Introducción a Scripting con gvSIGTaller de Introducción a Scripting con gvSIG
Taller de Introducción a Scripting con gvSIG
 
Py Qt Desarrollando Aplicaciones De Escritorio El Co Di Go K
Py Qt Desarrollando Aplicaciones De Escritorio El Co Di Go KPy Qt Desarrollando Aplicaciones De Escritorio El Co Di Go K
Py Qt Desarrollando Aplicaciones De Escritorio El Co Di Go K
 
Unidad V Tutorial de Python
Unidad V Tutorial de PythonUnidad V Tutorial de Python
Unidad V Tutorial de Python
 
Semana V
Semana VSemana V
Semana V
 
Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_
 
Grupo 201
Grupo 201Grupo 201
Grupo 201
 

Destacado

Manual de lenguaje C++
Manual de lenguaje C++Manual de lenguaje C++
Manual de lenguaje C++rcc1964
 
Estructua Basica Lenguaje C++
Estructua Basica Lenguaje C++Estructua Basica Lenguaje C++
Estructua Basica Lenguaje C++franjpr
 
Repaso del lenguaje C++
Repaso del lenguaje C++Repaso del lenguaje C++
Repaso del lenguaje C++g_torrealba
 
Tecnicas avanzadas de programacion en lenguaje c++ (manual)
Tecnicas avanzadas de programacion en lenguaje c++ (manual)Tecnicas avanzadas de programacion en lenguaje c++ (manual)
Tecnicas avanzadas de programacion en lenguaje c++ (manual)Ignacio Reyes
 
Presentación de C++
Presentación de C++Presentación de C++
Presentación de C++Sylvert
 
Code blocks & lenguaje c++
Code blocks & lenguaje c++Code blocks & lenguaje c++
Code blocks & lenguaje c++aldaircausado11
 
Lenguaje de programacion c++ basico 2da parte instalación del compilador
Lenguaje de programacion c++ basico 2da parte instalación del compiladorLenguaje de programacion c++ basico 2da parte instalación del compilador
Lenguaje de programacion c++ basico 2da parte instalación del compiladorDunkherz
 
Estructura de lenguaje C++
Estructura de lenguaje C++Estructura de lenguaje C++
Estructura de lenguaje C++jhoel terrel
 
c++ introduccion
c++ introduccionc++ introduccion
c++ introduccionjennipaola
 
Curso de C++ (2014)
Curso de C++ (2014)Curso de C++ (2014)
Curso de C++ (2014)Miriam Ruiz
 
2 POO Presentación
2 POO Presentación2 POO Presentación
2 POO Presentaciónguest7b7e934
 
Manual programacion c++
Manual programacion c++Manual programacion c++
Manual programacion c++taker85
 

Destacado (20)

Manual de lenguaje C++
Manual de lenguaje C++Manual de lenguaje C++
Manual de lenguaje C++
 
C# desde cero sesion 2
C# desde cero   sesion 2C# desde cero   sesion 2
C# desde cero sesion 2
 
Estructua Basica Lenguaje C++
Estructua Basica Lenguaje C++Estructua Basica Lenguaje C++
Estructua Basica Lenguaje C++
 
Clase 5
Clase 5Clase 5
Clase 5
 
Repaso del lenguaje C++
Repaso del lenguaje C++Repaso del lenguaje C++
Repaso del lenguaje C++
 
Lenguaje c++
Lenguaje c++Lenguaje c++
Lenguaje c++
 
Tecnicas avanzadas de programacion en lenguaje c++ (manual)
Tecnicas avanzadas de programacion en lenguaje c++ (manual)Tecnicas avanzadas de programacion en lenguaje c++ (manual)
Tecnicas avanzadas de programacion en lenguaje c++ (manual)
 
Presentación de C++
Presentación de C++Presentación de C++
Presentación de C++
 
Code blocks & lenguaje c++
Code blocks & lenguaje c++Code blocks & lenguaje c++
Code blocks & lenguaje c++
 
Lenguaje de programacion c++ basico 2da parte instalación del compilador
Lenguaje de programacion c++ basico 2da parte instalación del compiladorLenguaje de programacion c++ basico 2da parte instalación del compilador
Lenguaje de programacion c++ basico 2da parte instalación del compilador
 
Lenguaje c++
Lenguaje c++Lenguaje c++
Lenguaje c++
 
Lenguajec(1)
Lenguajec(1)Lenguajec(1)
Lenguajec(1)
 
Estructura de lenguaje C++
Estructura de lenguaje C++Estructura de lenguaje C++
Estructura de lenguaje C++
 
Diagrama de flujo
Diagrama de flujoDiagrama de flujo
Diagrama de flujo
 
c++ introduccion
c++ introduccionc++ introduccion
c++ introduccion
 
Curso de C++ (2014)
Curso de C++ (2014)Curso de C++ (2014)
Curso de C++ (2014)
 
Clase 1 Lenguaje C++
Clase 1 Lenguaje C++Clase 1 Lenguaje C++
Clase 1 Lenguaje C++
 
2 POO Presentación
2 POO Presentación2 POO Presentación
2 POO Presentación
 
Manual programacion c++
Manual programacion c++Manual programacion c++
Manual programacion c++
 
C++ =)
C++ =)C++ =)
C++ =)
 

Similar a Python C API

Python_Module_01_Courtesy.pdf
Python_Module_01_Courtesy.pdfPython_Module_01_Courtesy.pdf
Python_Module_01_Courtesy.pdfCeth1
 
Programación en c++
Programación en c++Programación en c++
Programación en c++andermijan
 
Investigacion de Python.pptx
Investigacion de Python.pptxInvestigacion de Python.pptx
Investigacion de Python.pptxSelTrejo
 
A3 u1-16230227
A3 u1-16230227A3 u1-16230227
A3 u1-16230227erikalejo
 
Introduccion a C++
Introduccion a C++Introduccion a C++
Introduccion a C++LenHugo
 
Funciones C++
Funciones C++Funciones C++
Funciones C++Jarvis_15
 
Estructura basica para_c_
Estructura basica para_c_Estructura basica para_c_
Estructura basica para_c_Jesus22barrera
 
Presentacion de la Estructura basica para_c++
Presentacion de la Estructura basica para_c++Presentacion de la Estructura basica para_c++
Presentacion de la Estructura basica para_c++ValeriaBerrones
 
Software para el aprendizaje de la programación EC 2. Presentación 3: Python
 Software para el aprendizaje de la programación EC 2. Presentación 3: Python Software para el aprendizaje de la programación EC 2. Presentación 3: Python
Software para el aprendizaje de la programación EC 2. Presentación 3: PythonUCC_Elearning
 
Actividad 3 . funciones en php
Actividad 3 . funciones en phpActividad 3 . funciones en php
Actividad 3 . funciones en phpLeonardoPuerta2
 
Python para ingenieros civiles.pdf
Python para ingenieros civiles.pdfPython para ingenieros civiles.pdf
Python para ingenieros civiles.pdfMiguelLuque15
 
python-para-todos.pdf
python-para-todos.pdfpython-para-todos.pdf
python-para-todos.pdfJaviMartin21
 

Similar a Python C API (20)

Python_Module_01_Courtesy.pdf
Python_Module_01_Courtesy.pdfPython_Module_01_Courtesy.pdf
Python_Module_01_Courtesy.pdf
 
Funcionesclase1
Funcionesclase1Funcionesclase1
Funcionesclase1
 
Guía funciones
Guía funcionesGuía funciones
Guía funciones
 
Aprendizaje de Lenguaje de Programación Python
Aprendizaje de Lenguaje de Programación PythonAprendizaje de Lenguaje de Programación Python
Aprendizaje de Lenguaje de Programación Python
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 
Investigacion de Python.pptx
Investigacion de Python.pptxInvestigacion de Python.pptx
Investigacion de Python.pptx
 
A3 u1-16230227
A3 u1-16230227A3 u1-16230227
A3 u1-16230227
 
8448148681
84481486818448148681
8448148681
 
Introduccion a C++
Introduccion a C++Introduccion a C++
Introduccion a C++
 
Funciones C++
Funciones C++Funciones C++
Funciones C++
 
Estructura basica para_c_
Estructura basica para_c_Estructura basica para_c_
Estructura basica para_c_
 
Presentacion de la Estructura basica para_c++
Presentacion de la Estructura basica para_c++Presentacion de la Estructura basica para_c++
Presentacion de la Estructura basica para_c++
 
FUNCIONES LENGUAJE C
FUNCIONES LENGUAJE CFUNCIONES LENGUAJE C
FUNCIONES LENGUAJE C
 
Funciones en C
Funciones en CFunciones en C
Funciones en C
 
Software para el aprendizaje de la programación EC 2. Presentación 3: Python
 Software para el aprendizaje de la programación EC 2. Presentación 3: Python Software para el aprendizaje de la programación EC 2. Presentación 3: Python
Software para el aprendizaje de la programación EC 2. Presentación 3: Python
 
Actividad 3 . funciones en php
Actividad 3 . funciones en phpActividad 3 . funciones en php
Actividad 3 . funciones en php
 
Python para ingenieros civiles.pdf
Python para ingenieros civiles.pdfPython para ingenieros civiles.pdf
Python para ingenieros civiles.pdf
 
Guia final so
Guia final soGuia final so
Guia final so
 
Presentación appy/pod
Presentación appy/podPresentación appy/pod
Presentación appy/pod
 
python-para-todos.pdf
python-para-todos.pdfpython-para-todos.pdf
python-para-todos.pdf
 

Python C API

  • 1. Angel Freire <cuerty@gmail.com> http://blog.cuerty.com/charlas/eacpy PyCon Argentina 2010, Córdoba Extendiendo aplicaciones en C y C++ con Python
  • 2.
  • 3. Conocer (un poco) la API que CPython nos brinda para esto
  • 4. Conocer las opciones para embeber Python en programas escritos en otros lenguajes
  • 5.
  • 6. Las reglas de negocio varían
  • 7. No es necesario recompilar para agregar una nueva funcionalidad a la aplicación
  • 8. Para permitirle a los usuarios finales extender fácilmente nuestra aplicación
  • 9.
  • 11. Esta disponible para varias plataformas
  • 12. Se descarga de http://www.python.org
  • 13.
  • 15. ¿Que es CPython? El mismo interprete de Python utiliza la biblioteca *. * Algunas distribuciones de Linux, como Ubuntu, eligen compilar el interprete de manera estática, por lo que el mismo no esta linkeado contra la biblioteca.
  • 16.
  • 17.
  • 24.
  • 25. Crear los módulos básicos ( __main__, __builtin__, sys )
  • 26. Crear la lista de donde se buscan los módulos ( sys.path ) Es obligatorio llamar a esta función.
  • 27.
  • 28. Libera la memoria utilizada La diferencia entre uno u otro es que el segundo también finaliza el proceso. Si no se llama a alguna de estas funciones al terminar de usar la biblioteca existe un comportamiento indeterminado.
  • 29.
  • 30. PyRun_InteractiveOne para una interpretar linea interactiva.
  • 31. PyRun_InteractiveLoop para interpretar muchas lineas de manera interactiva.
  • 32. PyRun_File para ejecutar un archivo.
  • 33. PyEval_EvalCode para evaluar código. Mas las funciones para llamar a objetos.
  • 34.
  • 35. Cada tipo de datos tiene al menos una función que crea un objeto de ese tipo.
  • 36. Y tiene varias funciones para operar sobre ese tipo de datos.
  • 37.
  • 38. Controlar si el PyObject* es una lista: PyList_Check
  • 39. Obtener un char* en C de un str/bytes en Python: PyString_AsString
  • 40. Controlar el tamaño de una Tupla: PyTuple_Size
  • 41. Controlar si determinada key esta en el diccionario: PyDict_Contains
  • 42. Agregar un elemento a una lista: PyList_Append
  • 43.
  • 44. Float
  • 46. Sets
  • 48. Buffers Y también existen muchas mas funciones especificas para la necesidad de cada tipo de datos.
  • 50.
  • 52. Los dos parámetros de la función
  • 53. La lista de parámetros para pasar a la función
  • 55. Linea por linea: import math pModule = PyImport_ImportModule(&quot;math&quot;); pFunction = PyObject_GetAttrString(pModule, &quot;pow&quot;); Importa el modulo “ math ” y guarda en pFunction una referencia a la función “ pow ” de dicho modulo.
  • 56. Linea por linea: chequeos if (PyCallable_Check(pFunction)) { .... } Controla el valor guardado en pFunction se puede llamar (es decir, es un objeto con una función __call__ ).
  • 57. Linea por linea: Crear objetos x = PyInt_FromLong(2L); y = PyInt_FromLong(2L); pArgs = PyTuple_New(2); PyTuple_SetItem(pArgs, 0, x); PyTuple_SetItem(pArgs, 1, y); Crea dos objetos del tipo int y los guarda dentro de las variables x e y. Después crea una tupla de dos elementos de largo y pone a x en el primer lugar e y en el segundo.
  • 58. Linea por linea: Llamar a la función pResponse = PyObject_CallObject(pFunction, pArgs); if (PyFloat_Check(pResponse)) { double res = PyFloat_AsDouble(pResponse); printf(&quot;math.pow(2,2) es igual a %f&quot;, res); } Llama a la función y trata de interpretar la respuesta como un objeto del tipo float . Si es así lo convierte a un objeto double de C y lo imprime usando la función de la biblioteca estándar de C printf .
  • 59. Linea por linea: Ref counting Py_XDECREF(pFunction); Py_XDECREF(x); Py_XDECREF(y); Py_XDECREF(pArgs); Py_XDECREF(pResponse); Py_DECREF(pModule); Decrementa el conteo de referencias a todos esos objetos, Py_XDECREF controla si los objetos son nulos antes de decrementar, Py_DECREF no.
  • 60. Reference Counting CPython lleva cuenta de cuantas referencias hay a un objeto. Cuando el conteo llega a cero significa que se puede liberar la memoria que dicho objeto esta usando. Este mecanismo de Garbage Collection es conocido como Reference Counting. Si utilizamos la API de CPython nosotros como programadores somos los responsables de esta tarea y debemos realizarla utilizando Py_DECREF y Py_XDECREF .
  • 61.
  • 63.
  • 64. Se pueden crear muchos interpretes
  • 65. Se puede ejecutar un interprete desde muchos threads pero es necesario crear un estado para cada uno
  • 66. Mas información Python/C API Reference Manual: http://docs.python.org/c-api/intro.html Extending and Embedding the Python Interpreter: http://docs.python.org/extending/index.html URL de esta presentación: http://blog.cuerty.com/charlas/eacpy/