Índice de contenidos...python vs. otros lenguajes iii :. escribir programas en python requiere...

77

Upload: others

Post on 19-Aug-2021

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad
Page 2: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Índice de Contenidos :.

Sesión 3 :: Transp. 2

Introducción :: 1Intérprete :: 2

Conceptos Básicos :: 3Estructuración de código :: 4

Programación OO :: 5Pygame :: 6

Scripting Python – C :: 7Referencias :: 8

[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos

Page 3: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

¿Qué es Python? :.

[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos

● Python no es un lenguaje únicamente de consola.

● Python es potente y rápido.

● Python es muy sencillo.

● Python está en continuo crecimiento.

Sesión 3 :: Transp. 3

Page 4: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Características I :.

● Alto nivel

● Interpretado

● Interactivo

● Orientado a objetos

● OpenSource(certificación OSI)

- copyright pero su uso no tiene restricciones

- compatible licencia GPL a partir de versión 2.1.1

[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos

Sesión 3 :: Transp. 4

Page 5: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Características II :.

● Extensible- C / C++ / Fortran- Java( utilizando Jython)

● Encastrable en aplicaciones

● Multiplataforma. Portable.Unix/Linux, Windows, Mac, PalmOS, WindowsCE, RiscOS, VxWorks, QNX, OS/2, OS/390, AS/400, PlayStation, Sharp Zaurus, BeOS, VMS…

● Seguro(no: “core dumps”, “segmentation fault” )

● Rápido y cómodo

[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos

Sesión 3 :: Transp. 5

Page 6: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Propiedades del Lenguaje :.

● Cualquier elemento es un objeto

● Paquetes, módulos, clases, funciones

● Manejo de excepciones

● Tipado dinámico, polimorfismo

● Tipado fuerte

● Sobrecarga de operadores

● Bloques estructurales identificados por tabulación

● Sensible a mayúsculas/minúsculas

[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos

Sesión 3 :: Transp. 6

Page 7: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

¿Para que se utiliza? :.

● Prototipado rápido

● Programación Web(tanto en cliente como en servidor)

● Scripting

● En aplicaciones científicas

● Procesamiento de XML

● Aplicaciones de bases de datos

● Aplicaciones GUI

● Educación

[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos

Sesión 3 :: Transp. 7

Page 8: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Interfaces con... :.

● XML● DOM● XMLRPC, SOAP, Web Services

● Bases de datos relacionales● MySQL, PostgreSQL, Oracle , ODBC, Sybase, Informix

● Java (via Jython)● Objective C● COM, DCOM (.NET también)● Muchas librerías GUI

● Multiplataforma(Tk, wxWindows, GTK, Qt)● Específicas de plataforma(MFC, Mac (classic, Cocoa), X11

[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos

Sesión 3 :: Transp. 8

Page 9: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Arquitectura de Python :.

¿Disponible módulo

compilado?

Script Fuente

Salida

Bytecode Compilado

Sentencia Import

Modulo Fuente

Máquina Virtual Python

CompiladorPython

Extensión C/C++

Librería C/C++

Externa

Extensión C/C++

[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos

Sesión 3 :: Transp. 9

Page 10: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Python vs. otros lenguajes I :.

[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos

Sesión 3 :: Transp. 10

Page 11: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Python vs. otros lenguajes II :.

class Hola { public static void main(String argumentos[ ]){

System.out.println("Hola, mundo"); }}

Program Hola;Begin writeln('Hola, mundo');End.

void main(){ printf ("Hola, mundo");}

print 'Hola, mundo'

Java

Pascal

Python

C

[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos

Sesión 3 :: Transp. 11

Page 12: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Python vs. otros lenguajes III :.

● Escribir programas en Python requiere menos de la mitad de tiempoque en Java, C o C++.

● El código resultante es la mitad de largo.

● No hay diferencias en la fiabilidad de los programas.

● El consumo de memoria es alrededor del doble frente a C y C++. Java consume alrededor del doble de Python.

● El código en Python es más rápido que en Java.

● Los lenguajes de script más rápidos son Python y Perl.

● La variación en rendimiento de los programas se debe más a los programadores que a los lenguajes.

[Contenido] 1. Introducción :: 2. Intérprete :: 3. Conceptos Básicos

Sesión 3 :: Transp. 12

Page 13: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

¿Qué es un intérprete? :.

[Contenido] 2. Intérprete :: 3.Conceptos Básicos :: 4. Estructuración

● Aquel programa que recibe como entrada un programa escrito en lenguaje no máquina y lo convierte a código máquina ejecutable por el computador. ● Ejecución secuencial de instrucciones● No generación de ejecutables

● Portabilidad: cambiando el intérprete no el código...

Sesión 3 :: Transp. 13

Page 14: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Instalación :.

[Contenido] 2. Intérprete :: 3.Conceptos Básicos :: 4. Estructuración

Windows: Selección del directorio de destino Si/No copia de seguridad de archivos reemplazados Seleccionar componentes ...

Linux:Red Hat : rpmDebian: apt-get install python...Source: python-2.X.tgz

tar -zxvf python-2.X.tgz "./configure", "make", "make install"

http://www.python.org

URL de descarga:

Sesión 3 :: Transp. 14

Page 15: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Primera toma de contacto... :.

[Contenido] 2. Intérprete :: 3.Conceptos Básicos :: 4. Estructuración

● Iniciar intérprete:pythonpython fichero.py

● Salir del intéprete: Unix: Ctrl-D ó Ctrl-Z Windows: Ctrl-Z + return En ambos: “ import sys; sys.exit() ”

● Modo interactivo: “>>>” “...”

● Gestión de errores

Ejemplo A:

Ejemplo B: Como calculadora

>>> x = 1>>> if x:... print “hola mundo”...

Sesión 3 :: Transp. 15

Page 16: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Sintaxis :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● ¡Sin delimitadores de bloque! ⇨Tabuladores

● Esto obliga a “código sangrado”

● La instrucción termina con la línea (salvo uso “\”)

● Uso de “:” como separador de sentencias compuestas.

● Uso de “;” para separar sentencias en la misma línea.●

● Recolector de Basura: Uso del “Contador de Referencias”.

Sesión 3 :: Transp. 16

Page 17: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Variables :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● “Nacen” cuando se les asigna valor

● “Desaparecen” cuando se sale de su ámbito

● Peligros: - utilizar variables sin valor previamente asignado

- se tiene la variable i = 5 y se cometer el error de j=7 cuando se quiere i=7... Se crea una nueva variable

● Recordar: Python es sensible a mayúsculas/minúsculas

Sesión 3 :: Transp. 17

Page 18: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Tipos de Datos I :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos

● Secuencia● Cadenas● Listas● Tuplas

●Diccionarios

Sesión 3 :: Transp. 18

Page 19: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Tipos de Datos II :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos

● Secuencia● Cadenas● Listas● Tuplas

●Diccionarios

● Operaciones: + - * / **

● Paréntesis para agrupaciones

● Trunca la división entera

>>>1 / 2 >>>1.0 / 2.0

0 0.5

● La división entera retorna el valor “suelo”

>>>7 / 3 >>>7 / -3

2 -3

Sesión 3 :: Transp. 19

Page 20: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Tipos de Datos III :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos

● Secuencia● Cadenas● Listas● Tuplas

●Diccionarios

● Tamaño arbitrario

● “L”

● Ejemplos:

>>>2L * 100 200L

>>>2L ** 50

1125899906842624L

>>>123456789987654321123456789 * 2 246913579975308642246913578L

Sesión 3 :: Transp. 20

Page 21: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Tipos de Datos IV :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos

● Secuencia● Cadenas● Listas● Tuplas

●Diccionarios

● Soporte completo para punto flotante

>>>2.20 / 5.0 0.44000000000000006

>>>10. * ( 3.5 / 2.) 17.5

● Operaciones con operadores mixtos se convierten a punto flotante:

>>>3 * 4.78 / 3.

4.7800000000000002

>>>9.75 / 4 2.4375

Sesión 3 :: Transp. 21

Page 22: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Tipos de Datos V :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos

● Secuencia● Cadenas● Listas● Tuplas

●Diccionarios

● Sufijo parte imaginaria: “j” or “J”

● Formato: “(real+imagj)”

● Función complex(real,imag)

>>>1j + 4J 5j

>>>4j * 10j (-40+0j)

>>> 4+5j / 3J (5.666666666666667+0j)

>>> 1j * complex(1,1) (-1+1j)

Sesión 3 :: Transp. 22

Page 23: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Tipos de Datos VI :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos

● Secuencia● Cadenas● Listas● Tuplas

●Diccionarios

● Representados como números en punto flotante. Ejemplo:

>>> a = 1.5 + 0.5j

>>> a.real

1.5

>>> a.imag

0.5

● Funciones de conversión:● float()● int()● long()

Sesión 3 :: Transp. 23

Page 24: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Tipos de Datos VII :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos

● Secuencia● Cadenas● Listas● Tuplas

●Diccionarios

● Definidos por:

Sesión 3 :: Transp. 24

Page 25: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Tipos de Datos VIII :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos

● Secuencia● Cadenas● Listas● Tuplas

●Diccionarios

● Operaciones:

“hola”+“mundo” ‘hola mundo’ Concatenación

“hola”*2 ‘holahola’ Repetición

“hola”[0] ‘h’ Indexado positivo

“hola”[-1] ‘a’ Indexado negativo

“hola”[1:3] ‘ol’ Particionado

“hola”[:2] ‘ho’

“hola”[1:] ‘ola’

‘h’+‘ola’[:2] ‘hol’

len(“hola”) 4 Longitud

“hola” < “lola” true Comparación

‘o’ in “hola” true Búsqueda

Sesión 3 :: Transp. 25

Page 26: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Tipos de Datos IX :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos

● Secuencia● Cadenas● Listas● Tuplas

●Diccionarios

● Agrupaciones de elementos de cualquier tipo >>>a =[“hola”,100,’j’,“mundo”]

● Los mismos operadores que para las cadenas

● Indexado y particionado

● Ejemplos:

>>>a[0] = 96

>>>a[1:2] = [“hola”,”mundo”,”...”]

>>>del a[-1]

>>>len(a)

>>>a[1:-1]

>>>2*a

Sesión 3 :: Transp. 26

Page 27: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Tipos de Datos X :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos

● Secuencia● Cadenas● Listas● Tuplas

●Diccionarios

● Más operaciones...

>>>a = range(5) #[0,1,2,3,4]

>>>a.append(5) #[0,1,2,3,4,5]

>>>a.extend([6]) #[0,1,2,3,4,5,6]

>>>a.count(3) #1

>>>a.insert(0,-1) #[-1,0,1,2,3,4,5,6]

>>>a.pop() #6

>>>a.pop(0) #-1

>>>a.remove(3) #[0,1,2,4,5]

>>>a.reverse() #[5,4,2,1,0]

>>>a.sort() #[0,1,2,4,5]

Sesión 3 :: Transp. 27

Page 28: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Tipos de Datos XI :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos

● Secuencia● Cadenas● Listas● Tuplas

●Diccionarios

● Lista inmutable● Se definen igual que una lista● El conjunto de elementos se encierra entre paréntesis en lugar de entre corchetes.● Los elementos presentan un orden definido [0..n] ó [-n..-1]● Porciones (se obtienen nuevas = listas) ● No presentan métodos● ¿por qué su existencia?

Más rápidas que las listas ⇒ Ideales para- conjunto constante de valores- claves de un diccionario

Sesión 3 :: Transp. 28

Page 29: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Tipos de Datos XII :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos

● Secuencia● Cadenas● Listas● Tuplas

●Diccionarios

● Ejemplos...

>>> t = ("a","b","10","z","example")

>>> t

('a','b','10','z','example')

>>> t[0]

'a'

>>> t[-1]

'example'

>>> t[1:3]

('b','10')

Sesión 3 :: Transp. 29

Page 30: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Tipos de Datos XIII :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos

● Secuencia● Cadenas● Listas● Tuplas

● Diccionarios

● “arrays asociativos”, “tablas hash”

● Indexados por “claves”

● Las claves = cualquier tipo inmutable

● Las claves pueden ser números o cadenas

● Formación:{ clave:valor, clave:valor,...}

● Ejemplo:

>>>tel={'juan':2324, 'paco':6217}

>>>tel['paco']

6217

Sesión 3 :: Transp. 30

Page 31: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Tipos de Datos XIV :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● Numéricos● Enteros (32 bits)● Enteros Largos● Reales● Complejos

● Secuencia● Cadenas● Listas● Tuplas

● Diccionarios

● Operaciones...>>>tel={'juan':2324,'paco':6217} #crear

>>>tel['juan']=2335 #modificar

>>>tel['luis']=3839 #insertar

>>>del tel[‘juan’] #eliminar

>>>tel.keys() #claves

['luis', 'paco']

>>>tel.values() #valores

[3839, 6217]

>>>tel.items() #elementos

[('luis', 3839), ('paco', 6217)]

>>>tel.has_key(‘carlos’) #Presencia

False

Sesión 3 :: Transp. 31

Page 32: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Estructuras de Control I :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● if condición: instrucciones

[elif condición: instrucciones]... else: instrucciones

● Ejemplo...>>>x = int(raw_input("Numero?"))

>>>if x < 0:

... print "numero negativo"

...elif x==0:

... print 'cero'

...elif x > 0:

... print "numero positivo"

...else:

... print "error“

...

Sesión 3 :: Transp. 32

Page 33: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Estructuras de Control II :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● for var in secuencia: instrucciones

Función: range()

NB: si se precisa modificar la lista sobre la que se itera debe iterarse sobre una copia: for x in s[:]:for x in s[:]:

● Ejemplo...>>>s = ['coche','casa','abrigo']

>>>for x in s:

... print x,len(x)

...

>>>range(5)

[0,1,2,3,4]

>>>for x in range(len(s)):

... print x, s[x]

...

Sesión 3 :: Transp. 33

Page 34: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Estructuras de Control III :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● while condición: instrucciones

● Ejemplo...>>>s = int(raw_input("Numero?"))

>>>x=0

>>>while x < s:

... print x

... x += 2

...

Sesión 3 :: Transp. 34

Page 35: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Estructuras de Control IV :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● break● continue● pass● return● else:

instrucciones

● Ejemplo...>>>for n in range(2,10):

... for x in range(2,n):

... if n % x == 0:

... print n,’=’,x,’*’,n/x

... break

... else:

... print n,’es numero primo’

...

>>>while True:

... Pass

...

Sesión 3 :: Transp. 35

Page 36: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Estructuras de Control V :.

[Contenido] 3.Conceptos Básicos :: 4. Estructuración de código

● try: instrucciones

except tipo_excepción: instrucciones else: instrucciones

● try: instrucciones finally: instrucciones

● Ejemplo...>>>for arg in sys.argv[1:]:... try:... f = open(arg,’r’)... except IOError:... print ‘no se puede abrir’,arg... else:... print arg,’tiene’,len(f.readlines()),’lineas’... f.close()...

>>>f = open(miFichero)>>>try:... ordenaFichero(f)...finally:... close(f)...

Sesión 3 :: Transp. 36

Page 37: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Funciones I :.

[Contenido] 4. Estructuración de código :: 5. Programación OO

● def name(arg1, arg2,...):

"""documentación""" #cadena de documentación oficialInstrucciones

return #para procedimiento. Similar a:return Nonereturn expresión #para función

● Ejemplo...>>>def fib(n):... """Genera la serie de Fibonacci hasta n""" ... a, b = 0, 1... while b < n:... print b... a,b= b, a+b... return

Sesión 3 :: Transp. 37

Page 38: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Funciones II :.

[Contenido] 4. Estructuración de código :: 5. Programación OO

● Paso de argumentos: ● paso por valor aunque... paso por referencia de objeto● si cambio de referencia de una variable dentro de una función, no se afecta a la variable de la llamada.● sin embargo se puede modificar el objeto al que referencia un parámetro.

● Ejemplo 1:def func1(n): n = n + 4 print n

x = 10func1(x)print x

● Ejemplo 2:def func2(l): l.append("tres")

miLista=["uno","dos"]print miListafunc2(miLista)print miLista

● Ejemplo 3:def func3(lista): lista=["L","M","X"]

miLista=["uno","dos"]print miListafunc3(miLista)print miLista

Sesión 3 :: Transp. 38

Page 39: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Funciones III :.

[Contenido] 4. Estructuración de código :: 5. Programación OO

● Las parámetros pueden presentar valores por defecto● Los valores por defecto sólo se evalúan una vez● Un función puede aceptar un secuencia arbitraria de parámetros(se recogen en una tupla)

● Ejemplo 1:def func5(n, cont=1): i=0 while i<n: print i i += cont

func5(4)print "-----"func5(7,2)print "-----"func5(100,cont=10)

● Ejemplo 3:def printList(*args): for arg in args: print "arg: "+arg

printList("casa", "os", "hola")

● Ejemplo 2:def f(a,l=[]): l.append(a) return l

print f(1)print f(2)print f(3)

Sesión 3 :: Transp. 39

Page 40: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Módulos :.

[Contenido] 4. Estructuración de código :: 5. Programación OO

● Módulo ≈ agrupación de funciones relacionadas... ≈ script● Las definiciones de un módulo se pueden importar en otros módulos● Nombre de archivo( *.py ) ≡ Nombre módulo● Importación:

● import nombre_módulo● nombre_módulo.nombreelemento

● from nombre_módulo import función1, función2● from nombre_módulo import *

● Búsqueda de módulos en la variable de entorno PYTHONPATH y en el directorio actual

Sesión 3 :: Transp. 40

Page 41: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Paquetes :.

[Contenido] 4. Estructuración de código :: 5. Programación OO

● Paquete ≈ agrupación de módulos relacionados● Puede ser en varios niveles● Importación:

● from nombrePaquete.nombreMódulo... import *● from nombrePaquete.nombreMódulo... import función

Sesión 3 :: Transp. 41

Page 42: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Introducción :.

● Soporta gran parte de los aspectos de la programación OO

● Aspectos:✔ herencia – herencia múltiple✔ polimorfismo✔ clases abstractas

● Todos los tipos de datos son objetos

[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C

Sesión 3 :: Transp. 42

Page 43: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Clases I :.

class name"""documentación"""

atributos

def nombreMétodo (args):instrucciones

...

class coche: numRuedas=0 numPuertas=0

def __init__(self,numR,numP): coche.numRuedas = numR coche.numPuertas = numP

def setRuedas(self, num): coche.numRuedas = num

def setPuertas(self,num): coche.numPuertas = num

def getRuedas(self): return coche.numRuedas

def getPuertas(self): return coche.numPuertas

[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C

Sesión 3 :: Transp. 43

Page 44: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Clases II :.

● Creación de instancias de objetos

● Ejemplo...c = coche(4,5)c.setPuertas(3)print c.getPuertas()

● Variable de clase vs. Instancia de variable

● Ejemplo...c1 = coche(4,3)c2 = coche(4,5)print c1.getPuertas()print c2.getPuertas()

[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C

Sesión 3 :: Transp. 44

Page 45: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Clases III :.

● Utilización del parámetro self● Ejemplo...class coche: numRuedas=0 numPuertas=0

def __init__(self,numR,numP): self.numRuedas = numR self.numPuertas = numP

def setRuedas(self, num): self.numRuedas = num

def setPuertas(self,num): self.numPuertas = num

def getRuedas(self): return self.numRuedas

def getPuertas(self): return self.numPuertas

● Ejemplo...c1 = coche(4,3)c2 = coche(4,5)print c1.getPuertas()print c2.getPuertas()

[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C

Sesión 3 :: Transp. 45

Page 46: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Clases IV :.● En cualquier momento se puede añadir, modificar o borrar atributos

● Ejemplo...class coche: __numRuedas=0 __numPuertas=0

def __init__(self,numR,numP): self.__numRuedas = numR self.__numPuertas = numP

def setRuedas(self, num): self.__numRuedas = num . . .

● Ejemplo...c1 = coche(4,5)coche.marca = 'seat'c2 = coche(4,3)print c2.marcaprint c1.marca

● Atributos privados

NB: Afecta a todas las instancias de la clase

[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C

Sesión 3 :: Transp. 46

Page 47: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Herencia I :.● Herencia simple:

class clase1:

...

class clase2(clase1):

...

● Ejemplo...class coche: . . .

class deportivo(coche): __velocidadMax=0

def setVelocidadMax(self, v): self.__velocidadMax = v

def getVelocidadMax(self): return self.__velocidadMax

Ejemplo...c1 = deportivo(4,5)c1.setVelocidadMax(200)print c1.getVelocidadMax()print c1.getPuertas()

[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C

Sesión 3 :: Transp. 47

Page 48: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Herencia II :.● Herencia múltiple:

class clase1:

...

class clase2:

...

class clase3(clase1,clase2):

...

deportivo

coche avion

[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C

Sesión 3 :: Transp. 48

Page 49: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Herencia III :.class coche: __numRuedas=0 __numPuertas=0

def __init__(self,numR,numP): self.__numRuedas=numR self.__numPuertas=numP

def setRuedas(self, num): self.__numRuedas = num

def setPuertas(self,num): self.__numPuertas = num

def getRuedas(self): return self.__numRuedas

def getPuertas(self): return self.__numPuertas

class avion: __potencia=0 def __init__(self,pot): self.__potencia=pot

def getPotencia(self): return self.__potencia

def setPotencia(self,pot): self.__potencia=pot

class deportivo(coche,avion): __velocidadMax=0

def __init__(self,nR,nP,pot): coche.__init__(self,nR,nP) avion.__init__(self,pot)

def setVelocidadMax(self, v): self.__velocidadMax = v

def getVelocidadMax(self): return self.__velocidadMax

[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C

Sesión 3 :: Transp. 49

Page 50: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Herencia IV :.

● Pueden generarse problemas de ambigüedad con la herencia múltiple.

Solución: Se analizan los ancestros de la clase por orden

de declaración en la lista de herencias.

● Ejemplo...c1 = deportivo(4,5,1000)c1.setVelocidadMax(200)print c1.getVelocidadMax()print c1.getPuertas()print c1.getPotencia()

[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C

Sesión 3 :: Transp. 50

Page 51: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Otros Aspectos :.

● Las clases pueden agruparse en módulos y en paquetes.

● Se pueden sobrescribir métodos

● Se adecuan fácilmente para la implementación de “patrones software”

[Contenido] 5. Programación OO :: 6. Pygame :: 7 Scripting Python - C

Sesión 3 :: Transp. 51

Page 52: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Introducción :.

● Conjunto de módulos Python (escritos en Python y C) diseñados para el desarrollo juegos.

● Recubren la librería SDL(Simple Directmedia Library)● SDL: Librería multiplataforma para manejar elementos multimedia (audio, teclado, ratón, joystick, hardware 3D via OpenGL,...) escrita en C ≅ DirectX

● Pygame + SDL adecuados para juegos 2D

[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias

Sesión 3 :: Transp. 52

Page 53: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Instalación :.

● Windows:

● Previamente instalado Python

● pygame-1.X.win32-py2.X.exe

● Linux:

● Red-Hat: RPM

● Debian: apt-get install pygame

[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias

http://www.pygame.org

URL de descarga:

Sesión 3 :: Transp. 53

Page 54: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Ejemplo I :.

[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias

import sys, pygamepygame.init() size = width, height = 640, 480speed1 = [2 , 2]speed2 = [2 , -2]

#color background: RGBdarkblue= 2,7,10

#create screenscreen = pygame.display.set_mode(size)

#create imagesball1 = pygame.image.load("ball.png")ball1Rect = ball1.get_rect()

ball2 = pygame.image.load("ball.png")ball2Rect = ball2.get_rect()

explo = pygame.image.load("bang.jpeg")exploRect = explo.get_rect()

Sesión 3 :: Transp. 54

Page 55: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Ejemplo II :.

[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias

#Ball2: initial positionball2Rect.centerx = 400ball2Rect.centery = 200

while 1:for event in pygame.event.get():

if event.type == pygame.QUIT: sys.exit()

#Move ballsball1Rect = ball1Rect.move(speed1)if ball1Rect.left < 0 or ball1Rect.right > width:

speed1[0] = -speed1[0]if ball1Rect.top < 0 or ball1Rect.bottom > height:

speed1[1] = -speed1[1]

ball2Rect = ball2Rect.move(speed2)if ball2Rect.left < 0 or ball2Rect.right > width:

speed2[0] = -speed2[0]if ball2Rect.top < 0 or ball2Rect.bottom > height:

speed2[1] = -speed2[1]

screen.fill(darkblue)

Sesión 3 :: Transp. 55

Page 56: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Ejemplo III :.

[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias

#collision detectionif (ball1Rect.colliderect(ball2Rect) or ball2Rect.colliderect(ball1Rect)) :

speed1[0] = -speed1[0]speed2[0] = -speed1[0]exploRect.centerx = (ball1Rect.centerx+ball2Rect.centerx)/2exploRect.centery = (ball1Rect.centery+ball2Rect.centery)/2screen.blit(explo,exploRect)

else:screen.blit(ball1, ball1Rect)screen.blit(ball2,ball2Rect)

pygame.display.flip()

Sesión 3 :: Transp. 56

Page 57: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Imágenes ... :.

[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias

def load_image(name, colorkey=None):fullname = os.path.join('data',name)try:

image = pygame.image.load(fullname)except pygame.error, message:

print 'No se pudo cargar imagen', fullnameraise SystemExit, message

image = image.convert()if colorkey is not None:

if colorkey is -1:colorkey = image.get_at((0,0))

image.set_colorkey(colorkey, RLEACCEL)return image, image.get_rect()

Sesión 3 :: Transp. 57

Page 58: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Sonido y texto... :.

[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias

def load_sound(name):fullname = os.path.join('data',name)try:

sound = pygame.mixer.Sound(fullname)except pygame.error, message:

print 'No se pudo cargar sonido:', fullnameraise SystemExit, message

return sound

if pygame.font:font = pygame.font.Font(None,36)text = font.render(“Curso de Desarrollo de Videojuegos”,1,(10,10,10))textpos = text.get_rect(centerx=background.get_width()/2)background.blit(text, textpos)

Sesión 3 :: Transp. 58

Page 59: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Eventos ... :.

[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias

...for event in pygame.event.get():

if event.type == QUIT: return

elif event.type == KEYDOWN and event.key == K_ESCAPE:return

elif event.type == MOUSEBUTTONDOWN:

...

elif event.type == MOUSEBUTTONUP:

...

Sesión 3 :: Transp. 59

Page 60: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

“Sprites” I :.

[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias

● Sprite ≈ objeto animado en un juego 2D

● Objetivo: mejorar la “rapidez” del juego

● Módulo “sprite” = clase sprite + clase group

● Un grupo es un contenedor de “sprites”

● Todo “sprite” siempre pertenece a un grupo como mínimo

● Ejemplos: “PACMAN” = pac + fantasmas + cerezas

“SPACE INVADERS” = nave + naves enemigas + disparos

Sesión 3 :: Transp. 60

Page 61: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

“Sprites” II :.

[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias

● Tipos de grupos:● Group● GroupSingle

● Contiene el último “sprite” añadido● RenderPlain

● Varios sprites● Método draw()

● RenderClear ● Varios sprites● Método clear()

● RenderUpdates● Varios sprites● Permite obtener una lista de los objetos pygame “Rects”, los cuales representan áreas que han cambiado.

Sesión 3 :: Transp. 61

Page 62: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

“Sprites” III :.

[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias

● Detección de colisiones:● spritecollide(sprite,group,dokill) -> list

● groupcollide(group1,group2,dokill1,dokill2) -> dictionary

for bomba in sprite.spritecollide(jugador, bombas, 1):bomba_sonido.play()explosion(bomba,0)

for alien in sprite.groupcollide(aliens, disparos, 1, 1).keys():bomba_sonido.play()explosion(alien, 0)

Sesión 3 :: Transp. 62

Page 63: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Propuesta :.

[Contenido] 6. Pygame :: 7 Scripting Python – C :: 8 Referencias

● Implementar el juego de:

“ Las tres en raya ”

Sesión 3 :: Transp. 63

Page 64: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Introducción :.

● Ventajas

✔ descomponer el código en componentes específicos. (P.e.: AI)

✔ flexibilizar y agilizar el desarrollo y mantenimiento

✔ prevención y control de errores

✔ aislar el código del motor del juego...

● Desventajas

¿?Pueden mermar el rendimiento

C/C++ Python

Java

JNI(Java Native Interface)

[Contenido] 7. Scripting Python – C :: 8. Referencias

Sesión 3 :: Transp. 64

Page 65: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Integrando Python en C I :.

● Acciones que se pueden ejecutar...:

● funcionalidades disponibles en Python

● un script Python

● una función contenida en un módulo Python

● convertir los valores de los datos de C a Python

● realizar la llamada a la función Python utilizando los valores

convertidos

● convertir los valores de los datos de Python a C

[Contenido] 7. Scripting Python – C :: 8. Referencias

Sesión 3 :: Transp. 65

Page 66: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Integrando Python en C II :.● Archivo de cabecera: <Python.h>

● Intérprete de Python: Py_Initialize() - Py_Finalize()

● Existen llamadas para ejecutar código en el intérprete como:

● int PyRun_SimpleString(char *command)

● int PyRun_SimpleFile(FILE *fp, char *filename)

● Ejemplo...#include <Python.h>

int main(int argc, char *argv[]){Py_Initialize();PyRun_SimpleString("import socket");PyRun_SimpleString("address = socket.gethostbyname('localhost')");PyRun_SimpleString("print \"[Ejemplo1]: Direccion IP(localhost): %s\" %address");Py_Finalize();

return 0;}

[Contenido] 7. Scripting Python – C :: 8. Referencias

Sesión 3 :: Transp. 66

Page 67: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Integrando Python en C III :.● PyObject:

● Puntero a un tipo de datos que representa un objeto Python

● En más profundidad...¿cómo utilizar un función de un módulo Python?

● Inicializar el intérprete de Python: Py-Initialize()

● Importar el módulo Python:

● PyObject* PyImport_ImportModule(char *name)

● PyObject* PyString_FromString(const char *v)

PyObject* PyImport_Import(PyObject *name)

[Contenido] 7. Scripting Python – C :: 8. Referencias

Sesión 3 :: Transp. 67

Page 68: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Integrando Python en C IV :.● Acceder a la función:

PyObject* PyObject_GetAttrString(PyObject *o, char *attr_name)

● Convertir valores de datos de C a Python:

PyObject* Py_BuildValue(char *format, ...)

Py_BuildValue("") NonePy_BuildValue("i", 123) 123 Py_BuildValue("iii", 123, 456, 789) (123, 456, 789) Py_BuildValue("s", "hello") 'hello' Py_BuildValue("ss", "hello", "world") ('hello', 'world') Py_BuildValue("()") () Py_BuildValue("(i)", 123) (123,) Py_BuildValue("(i,i)", 123, 456) (123, 456) Py_BuildValue("{s:i,s:i}", "abc", 123, "def", 456) {'abc': 123, 'def': 456} Py_BuildValue("((ii)(ii)) (ii)", 1, 2, 3, 4, 5, 6) (((1, 2), (3, 4)), (5, 6))

[Contenido] 7. Scripting Python – C :: 8. Referencias

Sesión 3 :: Transp. 68

Page 69: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Integrando Python en C V :.● Llamar a la función:

PyObject* PyEval_CallObject(PyObject* func, PyObject* args)

● Convertir valores de datos de Python a C:

int PyArg_Parse(PyObject *args, char *format, ...)

● Comprobación de excepciones:

PyObject* PyErr_Occurred( )

void PyErr_Print()

● Finalizar el intérprete: Py_Finalize()

[Contenido] 7. Scripting Python – C :: 8. Referencias

Sesión 3 :: Transp. 69

Page 70: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Integrando Python en C VI :.

#include <Python.h>#define NELEM 3

int main(int argc, char *argv[]){

PyObject *mymod, *pFunc, *pName, *pValue, *pArgs, *pList;char *cReverse;int i;float num = 15.0;int lista[NELEM]={1,2,3};int listaR[NELEM];

Py_Initialize();

/* Annadir a PYTHONPATH el directorio actual de trabajo */PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('.')");

/* Importar modulo */pName = PyString_FromString("reverse");mymod = PyImport_Import(pName);

[Contenido] 7. Scripting Python – C :: 8. Referencias

Sesión 3 :: Transp. 70

Page 71: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Integrando Python en C VII :.

if(mymod != NULL){

/* Invertir una cadena de texto */pFunc = PyObject_GetAttrString (mymod, "rString");pArgs = Py_BuildValue ("(s)","Hola Mundo"); pValue = PyEval_CallObject(pFunc, pArgs);PyArg_Parse(pValue, "s", &cReverse);printf("Inversa de la cadena -Hola Mundo- : %s \n", cReverse);if (PyErr_Occurred()) PyErr_Print();

/* Inversa de un numero */pFunc = PyObject_GetAttrString (mymod, "rNum");pArgs = Py_BuildValue ("(f)", num); pValue = PyEval_CallObject(pFunc, pArgs);PyArg_Parse(pValue, "f", &num);printf("Inversa del numero 15.0 : %f \n", num);if (PyErr_Occurred()) PyErr_Print();

[Contenido] 7. Scripting Python – C :: 8. Referencias

Sesión 3 :: Transp. 71

Page 72: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Integrando Python en C VIII :.

/* Inversa de una lista */pFunc = PyObject_GetAttrString (mymod, "rList");pArgs = Py_BuildValue ("([i,i,i])",lista[0],lista[1],lista[2]); pList = PyEval_CallObject(pFunc, pArgs);if( PyList_Check(pList)){

for(i=0; i<NELEM; i++){pValue = PyList_GetItem(pList, i);listaR[i] =(int)PyInt_AsLong(pValue);

}}else

printf("No devuelto tipo lista");printf("Inversa de la lista [%i,%i,%i]: [%i %i %i] \n",lista[0],lista[1],

lista[2],listaR[0],listaR[1],listaR[2]);if (PyErr_Occurred()) PyErr_Print();

}else{PyErr_Print();fprintf(stderr, "Error al cargar el modulo \n");return -1;

}Py_Finalize();return 0;

}

[Contenido] 7. Scripting Python – C :: 8. Referencias

Sesión 3 :: Transp. 72

Page 73: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Integrando Python en C IX :.

CFLAGS = -c -g -ansi -Wall LNKFLAGS = -g -Wall CC = gccLIBS = -L"/usr/lib/python2.3" -lpython2.3INCS = -I"/usr/include/python2.3"

OBJS = ejemplo2.o BIN = ejemplo2

all: $(BIN)

clean:rm -f $(OBJ) $(BIN)

$(BIN): $(OBJS)$(CC) $(LNKFLAGS) $(INCS) $(LIBS) $(OBJS) -o$(BIN)

ejemplo2.o: ejemplo2.c$(CC) $(CFLAGS) $(INCS) $(LIBS) -o ejemplo2.o ejemplo2.c

LINUX(Debian) - makefile

[Contenido] 7. Scripting Python – C :: 8. Referencias

Sesión 3 :: Transp. 73

Page 74: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Integrando Python en C X :.Windows – Dev-c++

[Contenido] 7. Scripting Python – C :: 8. Referencias

Sesión 3 :: Transp. 74

Page 75: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Integrando Python en C XI :.Windows – Dev-c++

● Generar libpython2X.a (libpython22.a, libpython23.a, ...)

1. Descargarse pexport(http://starship.python.net/crew/kernr/mingw32/pexports-0.42h.zip)

2. Obtener Python2X.dll (Python22.dll, Python23.dll)

3. Ejecutar: pexports python2X.dll > python2X.def

4. Ejecutar: (dlltoll es una utilidad de MinGW)

dlltool --dllname python2X.dll --def python2X.def --output-lib libpython2X.a

5. Copiar libpython2X.a en X:\XXX\python2X\libs\ (en la misma ubicación que python2X.lib)

[Contenido] 7. Scripting Python – C :: 8. Referencias

Sesión 3 :: Transp. 75

Page 76: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Referencias :.

[Contenido] 8. Referencias

● http://www.python.orgWeb oficial del lenguaje.

● http://www.cbel.com/python_programming_language/Enlaces a gran cantidad de librerías para python.

● http://pyspanishdoc.sourceforge.net/Proyecto en sourceforge de traducción de la documentación de

python al Castellano.

● http://www.pygame.org

Sesión 3 :: Transp. 76

Page 77: Índice de Contenidos...Python vs. otros lenguajes III :. Escribir programas en Python requiere menos de la mitad de tiempo que en Java, C o C++. El código resultante es la mitad

Anexo. Tipado Dinámico :.

[Contenido] Anexo

Tipado dinámico

>>> a = 7 >>> # a es un entero ... >>> a = ‘C2P' >>> # a es una cadena ... >>> a = [1,7,‘C2P']>>> # a es una lista

>>>'C2P' + 1 Traceback (most recent call last): File "<stdin>", line 1, in ?TypeError: cannot concatenate 'str' and 'int' objects

>>>'C2P' + str(1)'C2P1'

Tipado fuerte

Sesión 3 :: Transp. 77