Programador Jr. para Python Primera Parte

305
Programador Jr. para Python. Primera parte. Diciembre 2013. José Luis Chiquete Valdivieso

description

El código del curso puede ser descargado desde https://drive.google.com/file/d/0B-tF2kZLbAXPb1BVRHZwMG4tTHc/edit?usp=sharing

Transcript of Programador Jr. para Python Primera Parte

Page 1: Programador Jr. para Python Primera Parte

Programador Jr. para Python.Primera parte.

Diciembre 2013.José Luis Chiquete Valdivieso

Page 2: Programador Jr. para Python Primera Parte

Acceso al código

El código de este curso puede ser descargado en un archivo comprimido desde:

https://drive.google.com/file/d/0B-tF2kZLbAXPb1BVRHZwMG4tTHc/edit?usp=sharing

Page 3: Programador Jr. para Python Primera Parte

Temario (i)

● Introducción al lenguaje Python.● Palabras reservadas y espacio de nombres.● Expresiones y declaraciones.● Tipos de datos básicos y operadores.● Entrada y salida estándar.● Flujo de Ejecución.● Gestión de excepciones.● Orientación a objetos.

Page 4: Programador Jr. para Python Primera Parte

Temario (ii)● Más tipos de datos.● Funciones.● Módulos y paquetes.● Caso de estudio.● Escritura y lectura de archivos.

Page 5: Programador Jr. para Python Primera Parte

INTRODUCCIÓN

Page 6: Programador Jr. para Python Primera Parte

¿Qué es Python?

●Lenguaje de programación de alto nivel multi-propósito, interactivo e interpretado.●Creado por Guido Van Rossum.●Es de código abierto.●El nombre es en honor a “Monty Python Flying Circus”.●Enfocado en la legibilidad del código.●Altamente popular.●Altamente portable.●"Pilas incluidas".

Page 7: Programador Jr. para Python Primera Parte

¿Por qué Python?

● Python es un lenguaje muy popular.● Es muy simple.● Es multi-plataforma.● Se adecua a diversos paradigmas de programación

(programación funcional, programación orientada a objetos, programación procesal, etc.)

● Es altamente extensible.● Muchas aplicaciones de primer nivel utilizan Python

(Blender, Google App Engine, Django, etc.).

Page 8: Programador Jr. para Python Primera Parte

Índice TIOBE de popularidad de los lenguajes de programación (Octubre 2013).

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

Page 9: Programador Jr. para Python Primera Parte

Implementaciones de Python

●Cpython. Es la implementación original escrita en C.●Jython. Es la implantación de Python en la máquina virtual de Java.●IronPython. Es la implementación de Python sobre .NET●Pypy. Es una implementación de Python optimizada mediante un compilador "Just in Time".●SL4A permite ejecutar Python y otros lenguajes de script en Android.

Page 10: Programador Jr. para Python Primera Parte

Python 2 y Python 3

● Python 3 es una revisión completa del lenguaje de programación a partir de sugerencias y mejores prácticas.

● La sintaxis de Python 3 no es compatible con versiones previas de Python.

● Python 2 y Python 3 las ramas actuales (current).

● Durante el curso se utilizará Python 2.7 por defecto, pero se indicarán las diferencias entre Python 2 y Python 3 cuando sea el caso.

Page 11: Programador Jr. para Python Primera Parte

Instalación

● Prácticamente todas las distribuciones de GNU/Linux y *BSD tienen una versión de Python 2 pre-instalada.

● MacOS X tiene Python instalado de origen.● El instalador para Windows debe ser

descargado de http://www.python.org

Page 12: Programador Jr. para Python Primera Parte

Interfaz interactiva de Python

● Linux y Mac OS X: Es necesario abrir una terminal de texto y ejecutar el comando python

● En Windows se selecciona Python (Command Line).

Page 13: Programador Jr. para Python Primera Parte

Interfaz interactiva de Python

Page 14: Programador Jr. para Python Primera Parte

Interfaz interactiva de Python

● Para salir de la interfaz interactiva se invoca a exit()

Page 15: Programador Jr. para Python Primera Parte

Lenguaje

●Es un conjunto de cadenas de símbolos con los que se pueden crear mensaje.

●Consta de:●Gramática. Trata sobre la construcción del lenguaje.●Semántica. Trata sobre el significado del lenguaje.

Page 16: Programador Jr. para Python Primera Parte

Morfología y sintaxis

●La Gramática consta de:●Morfología: cómo se construyen las notaciones (género, tiempos, declinaciones).●Sintaxis: cómo se deben escribir las notaciones (orden, estructura).

●Los lenguajes artificiales tienen una morfología rígida y simplificada.

Page 17: Programador Jr. para Python Primera Parte

Lenguajes de programación

Lenguajes artificiales utilizados para ingresar valores y dar instrucciones a

un sistema.

Page 18: Programador Jr. para Python Primera Parte

Lenguajes de bajo y alto nivel

● Lenguajes de bajo nivel: Conjunto de instrucciones que son interpretados directamente por el CPU de los sistemas de cómputo (ensamblador, lenguaje máquina).

● Lenguajes de alto nivel: Conjunto de instrucciones legibles para el ser humano que son traducidas a instrucciones de bajo nivel (C, COBOL, Java, Perl, Python, etc.).

Page 19: Programador Jr. para Python Primera Parte

Lenguajes interpretados y compilados

● En el caso de los lenguajes compilados, el código fuente debe ser traducido a código de máquina para ser ejecutados (C, Objective-C).

● Los lenguajes interpretados ejecutan el código indirectamente “al vuelo” (BASIC, Perl, Python, etc.).

● En el caso de lenguajes como Java, el código fuente es convertido en bytecode para ser ejecutado por una máquina virtual.

Page 20: Programador Jr. para Python Primera Parte

Python es...

● Un lenguaje de alto nivel.● Un lenguaje interpretado.● Que soporta múltiples paradigmas

de programación.

Page 21: Programador Jr. para Python Primera Parte

Características (i)

●Sintaxis muy clara y legible.●Fuerte capacidad de introspección.●Orientación a objetos intuitiva.●Expresión del código procedimental.●Altamente modular, soporta paquetes jerárquicos.●Enfocado en el uso de excepciones para el manejo de errores.

Page 22: Programador Jr. para Python Primera Parte

Características (ii)

●Tipos de datos dinámicos de muy alto nivel.●Extensa biblioteca estándar (STL) y módulos de terceros para prácticamente todas las tareas.●Extensiones y módulos fácilmente escritos en C, C + + (o Java para Jython, o. NET para IronPython).●Integrable dentro de las aplicaciones como una interfaz de scripting.

Page 23: Programador Jr. para Python Primera Parte

El Zen de Python

Page 24: Programador Jr. para Python Primera Parte

El Zen de Python (i)● Bello es mejor que feo.● Explícito es mejor que implícito.● Simple es mejor que complejo.● Complejo es mejor que complicado.● Plano es mejor que anidado.● Escaso es mejor que denso.● La legibilidad cuenta.● Los casos especiales no son tan especiales

como para romper las reglas.

Page 25: Programador Jr. para Python Primera Parte

El Zen de Python (ii)● Aunque lo práctico le gana a la pureza.● Los errores no deben pasar en silencio.● A menos que sean silenciados explícitamente.● En caso de ambigüedad, resiste la tentación a

adivinar.● Debería haber una --y preferiblemente sólo

una-- manera obvia de hacer las cosas.● Aunque esa manera no parezca ser tan obvia a

menos que seas Holandés.

Page 26: Programador Jr. para Python Primera Parte

El Zen de Python (iii)● Ahora es mejor que nunca.● Aunque nunca es normalmente mejor que

ahora "mismo".● Si la implementación es difícil de explicar, es

una mala idea.● Si la implementación es fácil de explicar, podría

ser una buena idea.● Los Espacios de Nombres son una magnífica

idea -- ¡Hagamos más de esos!

Page 27: Programador Jr. para Python Primera Parte

Las PEPs de Python

● Acrónimo de "Python Enhancement Proposal".● Iniciativas y propuestas de la comunidad para

mejorar el funcionamiento y uso de Python.● http://www.python.org/dev/peps/● La PEP-8 es particularmente interesante, ya

que se refiere al estilo a utilizar al codear en Python.

Page 28: Programador Jr. para Python Primera Parte

Entornos Integrados de Desarrollo (IDE)

● Es un conjunto de herramientas e interfaces que facilitan la programación.

● Componentes:● Editor.● Depurador.● Compilador (no es necesario para Python).● Interfaz de ejecución.● Gestor de componentes.● Control de versiones.● Ejemplos: Eclipse, Visual Studio, NetBeans

Page 29: Programador Jr. para Python Primera Parte

IDE para Python● IDLE.● devpy para Eclipse.● SPE.● Boa Constructor.● Vim.● Emacs.● Gedit.● Wing IDE.● Komodo.● Ninja IDE.

Page 30: Programador Jr. para Python Primera Parte

Recursos a utilizar

● Para el presente curso utilizaremos:● Ninja IDE (http://ninja-ide.org/).● Un editor de textos (vim, gedit, notepad).● La interfaz interactiva de Python.● La línea de comando (símbolo del sistema o

una terminal).

Page 31: Programador Jr. para Python Primera Parte

Ninja-IDE

Page 32: Programador Jr. para Python Primera Parte

Características de Ninja-IDE

● Es de código abierto.● Ligero y fácil de usar.● Corre en Linux, Windows y MacOS X (hay que instalar

previamente XQuartz http://xquartz.macosforge.org/landing/ ).

● Capaz de generar proyectos distribuidos en diversos archivos.

● Cuenta con corrector sintáctico y de estilo (PEP-8) y sugerencias de optimización del código para Python 3.

Page 33: Programador Jr. para Python Primera Parte

Configuración de Ninja-IDE

● En Windows es necesario indicarle a Ninja-IDE la localización del archivo ejecutable de Python.

Page 34: Programador Jr. para Python Primera Parte

Funciones y comandos de Ninja-IDE

● Ctr+N: Crea un nuevo archivo.● Ctrl+O: Abrir un archivo.● Ctrl+S: Guardar el archivo actual.● Ctrl+F6: Ejecuta el archivo actual.● Shift+Ctrl+F6: Detiene la ejecución del

intérprete.

Page 35: Programador Jr. para Python Primera Parte

Ventanas del shell interactivo

Page 36: Programador Jr. para Python Primera Parte

Ventana del código

Page 37: Programador Jr. para Python Primera Parte

Ventana de ejecución

Page 38: Programador Jr. para Python Primera Parte

Hola Mundo

● En la interfaz interactiva.● Como script.● Ejecutable.

print "Hola Mundo"

Page 39: Programador Jr. para Python Primera Parte

Hola Mundo en la Interfaz Interactiva

Page 40: Programador Jr. para Python Primera Parte

Un script de Python

● Un script es un archivo de texto con código de Python, el cual normalmente tiene la extensión .py

● Algunos editores de texto cuentan con reconocimiento de la sintaxis de Python y utilizan colores para identificar sus componentes.

Page 41: Programador Jr. para Python Primera Parte

El script holamundo.py

Page 42: Programador Jr. para Python Primera Parte

Ejecutando un script

● Windows:● Una vez instalado Python, Windows relacionará los archivos

con extensión .py al intérprete de Python y los ejecutara al hacer doble click sobre ellos en el gestor de archivos.

● *NIX, ● Es necesario añadir la ruta al intérprete de Python insertando

la línea #! /usr/bin/python y asignarle los permisos de ejecución. Windows pasa por alto esta línea.

● Si no se cuenta con los permisos de ejecución, el script se puede ejecutar invocando al intérprete de Python: python <nombre del archivo>

Page 43: Programador Jr. para Python Primera Parte

Permisos de ejecución en *NIX

Page 44: Programador Jr. para Python Primera Parte

Ejecutando holamundo.py desde terminal

Page 45: Programador Jr. para Python Primera Parte

Ejecutando holamundo.py desde Ninja-IDE

● Al oprimir Ctrl+F6 en Ninja-IDE el script se ejecuta de esta manera:

Page 46: Programador Jr. para Python Primera Parte

Ejecutando holamundo.py desde un entorno gráfico

● Una vez que se le dan los permisos de ejecución en *NIX, también es posible ejecutar el script dando doble click en el gestor de archivos.

● El script se ejecutará en una terminal de texto, pero una vez terminado el script, la terminal se cerrará inmediatamente.

● Para que la terminal no se cierre, habrá que indicar al script que espere hasta que la tecla de retorno de carro sea presionada.

Page 47: Programador Jr. para Python Primera Parte

Script holamundo.py con raw_input()

Page 48: Programador Jr. para Python Primera Parte

Codificación en Python 2

● Python 2 utiliza por defecto una codificación ASCII, por lo que desplegar caracteres especiales como la "ñ" y los acentos generan un mensaje de error.

● Python 3 utiliza la codificación UTF-8 por defecto.

● Para definir la codificación se debe incluir la línea: # -*- coding: <codificación> -*-

● En el caso de textos en castellano se recomienda la codificación utf-8.

Page 49: Programador Jr. para Python Primera Parte

El script holaninos.py

Page 50: Programador Jr. para Python Primera Parte

PALABRAS RESERVADAS Y ESPACIO DE NOMBRES

Page 51: Programador Jr. para Python Primera Parte

Palabras reservadas de Python

● Las palabras reservadas (keywords) corresponden a los nombres de las declaraciones que el intérprete de Python incluye por defecto.

● El listado de palabras reservadas puede ser consultado ingresando help('keywords') desde la interfaz interactiva.

● No se deben utilizar dichas palabras para asignar nombres a otros objetos.

Page 52: Programador Jr. para Python Primera Parte

Palabras reservadas de Python 2.7

Page 53: Programador Jr. para Python Primera Parte

Palabras reservadas de Python 3.3

Page 54: Programador Jr. para Python Primera Parte

El espacio de nombres● Python es un lenguaje de muy alto nivel en el que

todos sus elementos son objetos, incluyendo los tipos de datos básicos.

● El espacio de nombres (name space) del intérprete de Python contiene las referencias entre los objetos existentes en la memoria (valores, funciones, clases, etc.) y los nombres a los que se encuentran ligados.

● Si un objeto no está ligado al menos a un nombre, dicho objeto es destruido automáticamente.

● El intérprete de Python tiene un espacio de nombres principal, pero cada función, módulo y objeto tiene su propio espacio de nombres.

Page 55: Programador Jr. para Python Primera Parte

El operador de asignación =● Para crear un objeto de cualquier tipo sólo es

necesario ligar a éste con un identificador mediante el operador de asignación "=".

● Desde un enfoque de programación procedimental, este tipo de asignación se comporta de forma muy similar a la creación variables.

● Un identificador siempre debe ser definido antes de ser utilizado.

Page 56: Programador Jr. para Python Primera Parte

El operador de asignación =

Page 57: Programador Jr. para Python Primera Parte

La función dir()● Cuando se ejecuta dir() sin ningún

parámetro, éste despliega los nombres contenidos en el espacio de nombres principal.

Page 58: Programador Jr. para Python Primera Parte

Sintaxis para nombres

● Los nombres deben empezar con un guión bajo "_" o una letra del alfabeto.

● Después del primer carácter, se pueden utilizar letras, números y/o guiones bajos.

● No se permiten caracteres especiales como "ñ", "#", "-", etc.

● Se pueden utilizar mayúsculas, pero Python es sensible a mayúsculas.

Page 59: Programador Jr. para Python Primera Parte

Sintaxis para nombres

Page 60: Programador Jr. para Python Primera Parte

La función id()

● Cada objeto cuenta con un identificador interno que corresponde a la posición en la que se encuentra almacenado en la memoria.

● La función id() permite conocer este identificador interno por medio del nombre.

● La correcta identificación de los objetos es importante, ya que un mismo objeto puede tener más de un nombre.

Page 61: Programador Jr. para Python Primera Parte

La función id()

Page 62: Programador Jr. para Python Primera Parte

La declaración del

El comando del funciona de la siguiente manera:● Desliga al identificador de un objeto en el espacio de

nombres.● Una vez que el nombre del identificador es desligado,

ya no es posible invocarlo por ese nombre.● En caso de que el objeto no esté ligado a otros

identificadores en el espacio de nombres, el intérprete de Python podría destruir al objeto por medio del "recolector de basura".

● El modo en el que un objeto se comporta al ser descartado varía dependiendo del tipo de objeto. Este tema se discutirá más adelante.

Page 63: Programador Jr. para Python Primera Parte

La declaración del

Page 64: Programador Jr. para Python Primera Parte

EXPRESIONES Y DECLARACIONES

Page 65: Programador Jr. para Python Primera Parte

Expresiones

Una expresión es una combinación de valores, operadores y variables.● 1 + 1● "azul" + " rojo"● print "Hola"

Page 66: Programador Jr. para Python Primera Parte

Declaraciones (Statements)

● Es una unidad de código que el intérprete de Python puede ejecutar.

Page 67: Programador Jr. para Python Primera Parte

Múltiples expresiones en una línea

● El intérprete de Python permite ejecutar múltiples expresiones en una sola línea separándolas por punto y comas ";"

● No se recomienda usar este recurso, ya que se corre el riesgo de ofuscar el código innecesariamente.

Page 68: Programador Jr. para Python Primera Parte

Expresiones en entorno interactivo

● La interfaz interactiva evalúa las expresiones tan pronto como son ingresadas y en su caso, despliega el resultado.

Page 69: Programador Jr. para Python Primera Parte

Expresiones con el intérprete

● Si esas mismas expresiones las guardamos en un archivo llamado expresiones.py y lo ejecutamos éste leerá el archivo y realizará una evaluación línea por línea en orden descendente, pero no desplegará el resultado de cada expresión.

Page 70: Programador Jr. para Python Primera Parte

El script expresiones.py

Page 71: Programador Jr. para Python Primera Parte

TIPOS DE DATOS BÁSICOS Y OPERADORES

Page 72: Programador Jr. para Python Primera Parte

Tipos de datos básicos● Números

● Enteros (int, long)– Decimales (24, 60)– Hexadecimales (0x18, 0x3c)– Octales (030, 074)– Binarios(0b11001, 0b111100)

● De punto flotante (float)● Complejos (complex)

– 3 + 45j, 1j

● Cadenas de texto (str)● Encerradas entre comillas "" o apóstrofes ''

– 'Hola Mundo'– "Vamos al McDonald's"

● Valores booleanos(bool)● True/False

Page 73: Programador Jr. para Python Primera Parte

Tipos en Python

● Tipos dinámicos: No es necesario definir previamente el tipo de una variable.

● Fuertemente tipado: No se pueden realizar operaciones con tipos distintos.

Page 74: Programador Jr. para Python Primera Parte

Funciones relativas a tipos de datos

● type() regresa el tipo de dato de una variable.

● str() transforma en una cadena de caracteres el contenido de una variable.

● int() transforma en un tipo entero el contenido de una variable.

● float() transforma en un número de punto flotante el contenido de una variable.

● complex() transforma en un número complejo el contenido de una variable.

● bool() transforma en un valor booleano el contenido de una variable. Cualquier valor distinto de 0 es True

Page 75: Programador Jr. para Python Primera Parte

Ejemplo del uso de tipos

Page 76: Programador Jr. para Python Primera Parte

Ejemplo del uso de tipos

Page 77: Programador Jr. para Python Primera Parte

Operadores aritméticos

En Python 2 las divisiones entre enteros dan por resultado valores enteros, mientras que en Python 3 las divisiones entre enteros dan como resultado valores de punto flotante.

Operador Descripción Ejemplo

+ Suma x = 1 + 2 # x es 3

- Resta x = 2 - 1 # x es 1

- Negativo x = -2 # x es -2

* Multiplicación x = 1 * 2 # x es 2

** Exponente x = 2 ** 3 # x es 8

/ División x = 1.0 / 2 # x es 0.5 *

// División entera x = 1.0 // 2 #x es 0.0

% Módulo x = 1.0 % 2 #x es 1

Page 78: Programador Jr. para Python Primera Parte

Operadores de asignación

Operador Descripción Ejemplo

= Asignación simple x = y

+= Suma x += y equivale a x = x + y

-= Resta x -= y equivale a x = x - y

*= Multiplicación x *= y equivale a x = x * y

**= Exponente x **= y equivale a x = x ** y

/= División x /= y equivale a x = x / y

//= División entera x //= y equivale a x = x // y

%= Módulo x %= y equivale a x = x % y

Page 79: Programador Jr. para Python Primera Parte

Reglas de precedencia

● Los operadores se apegan a la siguiente regla de precedencia siguiendo una secuencia de izquierda a derecha:● Paréntesis● Exponente● Multiplicación● División● Suma● Sustracción

Page 80: Programador Jr. para Python Primera Parte

Operadores de bit

Operador Descripción Ejemploa = 23 = 0b10111b = 14 = 0b1110

& AND a & b es 0b00110 = 6

| OR a | b es 0b11111 = 31

^ XOR a ^ b es 0b11001 = 25

>> Mover x bits a la derecha a << 1 es 0b101110 = 46

<< Mover x bits a la izquierda a >> 1 es 0b1011 = 11

Page 81: Programador Jr. para Python Primera Parte

Operadores de cadena

Operador Descripción Ejemplo

+ Concatenación a = ”Hola” b = ”Mundo”c = a + b # c es “HolaMundo”

* Repetición a = ”Hola”b = c * 3 # c es “HolaHolaHola”

Page 82: Programador Jr. para Python Primera Parte

Operadores de relación

Operador Evalúa== a == b # ¿a igual a b?!= a != b # ¿a distinta de b?> a > b #¿a mayor que b?< a < b #¿a menor que b?

>= a >= b #¿a mayor o igual que b?<= a <= b #¿a menor o igual que b?

Page 83: Programador Jr. para Python Primera Parte

Operadores Booleanos

Operador Evalúaor a or b # ¿Se cumplen a o b?

and a and b # ¿Se cumple a y b?not not a # ¿no es A?

Page 84: Programador Jr. para Python Primera Parte

Operador de identidad

Operador Evalúa

is a is b #equivale a id(a) == id(b)

is not a is not b #equivale a id(a) != id(b)

● El operador is evalúa si un identificador se refiere exactamente al mismo objeto.

Page 85: Programador Jr. para Python Primera Parte

ENTRADA Y SALIDA ESTÁNDAR

Page 86: Programador Jr. para Python Primera Parte

print

● print despliega en una terminal de texto la información que se le indica.

● En Python 2 se ejecuta como una palabra reservada " print ", mientras que en Python 3 se utiliza como una función " print () "

● Cuando print incluye una expresión, ésta es evaluada antes de ser desplegada.

● print puede desplegar varios valores separados por comas.

● En Python 2, si se deja una coma al final, el siguiente despliegue de print se hará en la misma línea.

Page 87: Programador Jr. para Python Primera Parte

print en Python 2

Page 88: Programador Jr. para Python Primera Parte

print() en Python 3

● Python 2.7 es una versión de transición, por lo que acepta ambas sintaxis.

Page 89: Programador Jr. para Python Primera Parte

print y print() en Python 2.7

● Para los alcances de este curso se usará la sintaxis de Python 2.

● Python 2.7 es una versión "de transición", por lo que acepta ambas sintaxis.

Page 90: Programador Jr. para Python Primera Parte

Despliegue con formato● Para desplegar datos en un formato específico

se utiliza el carácter sobre-escritura % seguido de uno de los siguientes caracteres.

● Después de la cadena se añade otro % y los valores a desplegar entre paréntesis separados por comas. Si sólo es un valor, no es necesario el paréntesis.

s cadena de texto

d entero

o octal

x hexadecima

f punto flotante

e Punto flotante en formato exponencial

Page 91: Programador Jr. para Python Primera Parte

Despliegue con formato

● Cuando se utiliza %s, equivale a aplicar la función str() al valor a desplegar.

● Para desplegar el signo de porcentaje "%" se utiliza %%.

Page 92: Programador Jr. para Python Primera Parte

Despliegue con formato

● Para desplegar el signo de porcentaje "%" se utiliza %%.

Page 93: Programador Jr. para Python Primera Parte

Despliegue de cifras significativas

● Para desplegar un número específico de cifras significativas de un valor de punto flotante, se añade un punto "." y el número de cifras a desplegarse después del signo % y antes del carácter f o e.

Page 94: Programador Jr. para Python Primera Parte

Caracteres de escapeSecuencia Acción

\n retorno

\t tabulador

\xXX carácter ASCII hexadecimal

\' apóstrofe

\" comillas

\\ diagonal invertida

Page 95: Programador Jr. para Python Primera Parte

La función eval()

● eval() es una función de Python que realiza la evaluación de una cadena de texto como si fuera una expresión.

● Cuando una cadena de texto no contenga una expresión válida, eval() generará un mensaje de error.

eval (<cadena de texto>)

Page 96: Programador Jr. para Python Primera Parte

La función eval()

Page 97: Programador Jr. para Python Primera Parte

La función raw_input()● La función por defecto para leer la entrada estándar es

raw_input()● raw_input() lee la entrada estándar hasta que se introduce

un retorno de carro <ENTER>.● El contenido capturado es devuelto al intérprete como una

cadena de caracteres.● La cadena de caracteres resultante puede ser almacenada

en memoria mediante la asignación de un nombre.

Page 98: Programador Jr. para Python Primera Parte

La función raw_input()● La función raw_input() permite desplegar una

cadena de texto antes de pedir el ingreso de caracteres de la siguiente forma:

raw_input(<cadena>)

Page 99: Programador Jr. para Python Primera Parte

La función input()

● input() funciona de forma similar a raw_input(), pero a diferencia de ésta, input() evalúa el contenido de lo que se ingresa de forma similar a ejecutar: eval(raw_input()).

● De ese modo, input() puede regresar valores de diversos tipos, en vez de sólo cadenas de texto.

● La desventaja de input() es que los contenidos que se ingresen deben de ser sintácticamente correctos o se generaran errores.

Page 100: Programador Jr. para Python Primera Parte

raw_input() vs input()

Page 101: Programador Jr. para Python Primera Parte

La función input() en Python 3

● Debido a los problemas que el uso de input() al estilo de Python 2 podría ocasionar, la función input() en Python 3 se comporta como raw_input() al estilo de Python 2.

● La función raw_input() fue descontinuada en Python 3.

Page 102: Programador Jr. para Python Primera Parte

FLUJO DE EJECUCIÓN

Page 103: Programador Jr. para Python Primera Parte

Indentación

● En Python la indentación implica una ejecución anidada.

● Por convención se utilizan cuatro espacios para indentar.

● Nunca se usan tabuladores en la indentación.● Para mayor referencia ir al PEP8.

Page 104: Programador Jr. para Python Primera Parte

Comentarios● Los comentarios son porciones de texto que no

son incluidos en el flujo de ejecución de un script y sirven para documentar al código.

● Cualquier texto después del carácter "#" y hasta el retorno de carro es considerado como un comentario.

● Algunas especificaciones de ejecución de Python también se colocan como si fueran comentarios.

● Los comentarios de varias líneas deben estar encerrados entre triples comillas o apóstrofes y son conocidos como docstrings.

Page 105: Programador Jr. para Python Primera Parte

El script hola_comentado.py

Page 106: Programador Jr. para Python Primera Parte

Documentación del código

● Los docstrings que se incluyen al principio de la un módulo o definición de una función o clase son reconocidos por Python para generación automática de la documentación del código (PEP 257).

Page 107: Programador Jr. para Python Primera Parte

Condicionales

● Cuando la ejecución de cierto bloque de código depende de una condición lógica en particular que sea de carácter booleanos (True/False), podemos utilizar los varios tipos de estructuras que if permite utilizar.

● A continuación se presentan algunos diagramas y script que ejemplifican el uso de las condicionales en Python.

Page 108: Programador Jr. para Python Primera Parte

Condicional if

Page 109: Programador Jr. para Python Primera Parte

El script if_simple.py

Page 110: Programador Jr. para Python Primera Parte

Condicional if... else

Page 111: Programador Jr. para Python Primera Parte

El script if_else.py

Page 112: Programador Jr. para Python Primera Parte

Condicional if... elif... else

Page 113: Programador Jr. para Python Primera Parte

El script if_elif_else.py

Page 114: Programador Jr. para Python Primera Parte

Recursividad con while

● Python cuenta con la declaración while para ejecutar un bloque de código recursivamente mientras se cumpla una condición determinada.

● Cuando dicha condición no se de, el flujo de ejecución continuará sin ejecutar el bloque dentro de while.

Page 115: Programador Jr. para Python Primera Parte

El script while.py

Page 116: Programador Jr. para Python Primera Parte

Interrupción del flujo lógico

● En ciertas circunstancias es necesario interrumpir el flujo lógico de un programa. Python cuenta con los siguientes recursos para hacerlo.

● La declaración break● La declaración continue● La función exit()

Dichos recursos se pueden utilizar en cualquier bloque de código. Para ilustrar su aplicación se utilizarán con while.

Page 117: Programador Jr. para Python Primera Parte

Terminación del bucle actual con continue

● Es posible terminar un subproceso de manera prematura con continue.

Page 118: Programador Jr. para Python Primera Parte

Terminación del bucle actual con continue

● Es posible terminar un subproceso de manera prematura con continue.

Page 119: Programador Jr. para Python Primera Parte

El script while_continue.py

Page 120: Programador Jr. para Python Primera Parte

Ruptura del bucle con break● Es posible terminar el bucle con break.

Page 121: Programador Jr. para Python Primera Parte

El script while_break.py

Page 122: Programador Jr. para Python Primera Parte

Terminación de la ejecución con exit()● El intérprete termina la ejecución del scritp a

ser invocada la función exit()

Page 123: Programador Jr. para Python Primera Parte

El script while_exit.py

Page 124: Programador Jr. para Python Primera Parte

Iteraciones● Una de las grandes fortalezas de Python es su

capacidad de generar muy diversos modos de realizar iteraciones de forma dinámica a partir de diversos tipos de datos.

for <iterador> in <objeto iterable>:● La forma más conocida de iterar es por medio

del uso de la función range()

Page 125: Programador Jr. para Python Primera Parte

La función range()

● Para definir rangos numéricos se usa la función range().

● range (n, m, s) cumple: rango >= n and rango < m en incrementos de s

● range (n, m) cumple: rango >= n and rango < m en incrementos de 1

● range (m) cumple: rango >= 0 and rango < m en incrementos de 1

Page 126: Programador Jr. para Python Primera Parte

El script for_simple.py

Page 127: Programador Jr. para Python Primera Parte

range() en Python 3

● La función range() en Python 2 crea una lista de números, lo cual puede consumir demasiados recursos cuando se trata de una iteración con números grandes.

● La función xrange() en lugar de crear una lista, genera un "iterador" a la vez, lo que hace más eficiente el uso de recursos.

● En Python 3 la función range() funciona como xrange() al estilo de Python 2.

Page 128: Programador Jr. para Python Primera Parte

GESTIÓN DE EXCEPCIONES

Page 129: Programador Jr. para Python Primera Parte

Gestión de excepciones

● Debido a lo dinámico que puede ser Python, es muy común que el intérprete se tope con múltiples fuentes de error.

● Una de las características más poderosas del lenguaje es la gestión de excepciones.

● Con Python no sólo es posible identificar y rastrear los errores, sino tomar acciones correctivas y preventivas.

Page 130: Programador Jr. para Python Primera Parte

Errores sintácticos● Los errores sintácticos son los más comunes

cuando se escribe código.● Un error sintáctico ocurre cuando el intérprete

encuentra una expresión que no está bien formada (rompe las reglas de sintaxis).

Page 131: Programador Jr. para Python Primera Parte

Excepciones● Las excepciones son errores lógicos que

detienen la ejecución del programa aún cuando la sintaxis del código sea correcta.

Page 132: Programador Jr. para Python Primera Parte

El script excepcion_probable.py

● El script excepcion_probable.py ejemplifica código susceptible a que ocurran errores de diversos tipos.

● El código tiene una sintaxis correcta.

Page 133: Programador Jr. para Python Primera Parte

Desencadenando una excepción● Al ejecutar error_probable.py, se provoca una excepción al ingresar

una cadena de texto sin estar encerrada entre paréntesis o apóstrofes.● Debido a que se utiliza la función input(), el intérprete evaluará como

una expresión aquello que se ingrese.● El error ocurre debido a que el intérprete identifica a la cadena de

caracteres como un nombre el cual no está definido en el espacio de nombres.

● El intérprete detiene la ejecución y despliega un mensaje.

Page 134: Programador Jr. para Python Primera Parte

Anatomía de un mensaje de error

● Un mensaje de error de Python se divide en 2 componentes:● La ruta de rastreo del error.

● La información sobre el error.

Page 135: Programador Jr. para Python Primera Parte

Rastreo del error

● Debido a que Python es altamente modular, un error puede desencadenarse en cierto punto, pero ocurrir en otro.

● Cuando ocurre un error, Python despliega la ruta. Esta ruta puede implicar a varios módulos.

● La ruta va en orden descendente desde el punto, pasando por varios puntos intermedios hasta el punto en el que se desencadenó el error.

Page 136: Programador Jr. para Python Primera Parte

Ruta del error

● En el caso que se ejemplifica, Python indica que el error se desencadenó en la línea 7 de excepcion_probable.py y despliega la línea en cuestión.

● El error ocurrió cuando el intérprete intentó ejecutar la expresión, por lo que en este caso no hay mayor información de la ruta, pero se deja evidencia del error.

Page 137: Programador Jr. para Python Primera Parte

Información del error

● La información del error se da en una sola línea.

● Indica el tipo de error que ocurrió.

● Despliega un mensaje que explica lo que ocurrió.

Page 138: Programador Jr. para Python Primera Parte

Tipos de excepciones

● Python es capaz de identificar muy diversos tipos de error a los que corresponden sendas excepciones capaces de tratar con cada uno de ellos.

● Se pueden consultar los diversos tipos de excepciones en la siguiente liga:

http://docs.python.org/2/library/exceptions.html

Page 139: Programador Jr. para Python Primera Parte

Posibles tipos de excepciones en el script excepcion_probable.py

● NameError

● ValueError

Page 140: Programador Jr. para Python Primera Parte

Posibles tipos de excepciones en el script excepcion_probable.py

● TypeError

● SyntaxError

Page 141: Programador Jr. para Python Primera Parte

Recursos de captura de excepciones● Python cuenta con una serie de recursos que

permiten la captura y gestión de excepciones, los cuales se ejecutan dependiendo de ciertas condiciones.

● Si la excepción no es capturada, ésta correrá hasta sus últimas consecuencias.

● Los recursos de gestión y captura de excepciones son:● try● except● else● finally

Page 142: Programador Jr. para Python Primera Parte

Delimitación del código con try● Cuando se identifica una sección de código

susceptible de errores, ésta puede ser delimitada con la expresión try.

● Cualquier excepción que ocurra dentro de esta sección de código podrá ser capturada y gestionada.

● En el caso del script excepcion_probable.py se puede observar por los mensajes de error que el segmento comprendido entre las líneas 7 y 9 es el que se debe delimitar.

Page 143: Programador Jr. para Python Primera Parte

Gestión de excepciones con except

...

...

try: <código suceptible de errores>except: <código>......

● La expresión except es la encargada de gestionar las excepciones que se capturan.

● Si se utiliza except sin mayores parámetros, ésta ejecutará el código que contiene para todas las excepciones que ocurran.

Page 144: Programador Jr. para Python Primera Parte

El script excepcion_basica.py

Page 145: Programador Jr. para Python Primera Parte

El script excepcion_basica.py

● El script excepcion_basica.py representa la forma más sencilla de capturar una excepción.

● El código susceptible de error fue delimitado con try.

● Cuando ocurre la excepción, except la captura, pero no hace nada en absoluto. Simplemente permite que el programa continúe.

Page 146: Programador Jr. para Python Primera Parte

La expresión pass

● La expresión pass no realiza ningún tipo de acción. Sin embargo, permite que un bloque de código no quede en blanco y se genere un error.

● En el script excepcion_basica.py, pass es utilizado para que la excepción sea atrapada, pero no se realiza ninguna acción.

● La expresión pass puede ser utilizada en funciones y métodos como se verá más adelante.

Page 147: Programador Jr. para Python Primera Parte

El script excepcion_simple.py

Page 148: Programador Jr. para Python Primera Parte

Uso de "banderas"● El script excepcion_simple.py levanta una

"bandera" cambiando el valor del objeto ocurre_error (de tipo booleano) en caso de que ocurra una excepción.

● El uso de "banderas" es muy común y permite cambiar el comportamiento en la ejecución de un programa en caso de que ocurran ciertas condiciones específicas.

Page 149: Programador Jr. para Python Primera Parte

Gestión de excepciones por tipo de error.

La expresión except puede ser utilizada de forma tal que ejecute código dependiendo del tipo de error que ocurra de una forma muy similar a elif.

...

...

try: <código suceptible de errores>except <ErrorTipo1>: <código1>except< ErrorTipo2>: <código2> except (<ErrorTipo3>, <ErrorTipo4>): <código3>except: <código4>......

Page 150: Programador Jr. para Python Primera Parte

El script excepciones_identificadas.py

Page 151: Programador Jr. para Python Primera Parte

El script excepciones_identificadas.py

Page 152: Programador Jr. para Python Primera Parte

Captura de descripciones de error● except tiene la capacidad de capturar la

descripción del error como un objeto de tipo str. ● Esta descripción puede ser asignada a un

nombre para ser desplegada.● Cuando se usa except sin parámetros, no es

posible recuperar el mensaje de descripción.......

try: <código suceptible de errores>except <TipodeError> as <nombre>: <código>......

Page 153: Programador Jr. para Python Primera Parte

La expresión as

● Existen algunos casos en los que sintácticamente no es posible utilizar el operador de asignación = para ligar un nombre a un objeto en el espacio de nombres.

● La expresión as actúa de forma idéntica al operador =, pero con una estructura sintáctica distinta como es el caso de except para capturar la descripción del error.

Page 154: Programador Jr. para Python Primera Parte

El script excepciones_descritas.py

Page 155: Programador Jr. para Python Primera Parte

El script excepciones_descritas.py

Page 156: Programador Jr. para Python Primera Parte

Uso de else

● Se utiliza else en el caso de que dentro del segmento de código delimitado por try no ocurra ninguna excepción.

...

...

try: <código suceptible de errores>except: <código1>......else: <código2>......

Page 157: Programador Jr. para Python Primera Parte

Uso de finally

● La expresión finally ejecuta el código dentro de ésta ya sea que ocurra la excepción o no.

● Este comportamiento es muy útil sobre todo cuando se hacen operaciones de escritura archivos, bases de datos o conexiones de red que pueden corromperse si no se cierran adecuadamente independientemente de si ocurre una excepción o no.

Page 158: Programador Jr. para Python Primera Parte

Uso de finally

..

...

try: <código suceptible de errores>except: <código1>......else: <código2>......finally: <código3>......

Page 159: Programador Jr. para Python Primera Parte
Page 160: Programador Jr. para Python Primera Parte

El script excepciones_atrapadas.py

Page 161: Programador Jr. para Python Primera Parte

El script excepciones_atrapadas.py

Page 162: Programador Jr. para Python Primera Parte

Levantar excepciones con raise

● En ciertas ocasiones es posible identificar una situación en la que cierta condición provocará un error. En ese caso se puede levantar una excepción antes de que el error ocurra y emitir un mensaje correspondiente.

● La expresión raise puede levantar esa excepción.

raise <TipodeError>(<mensaje>)

Page 163: Programador Jr. para Python Primera Parte

El script raise.py

Page 164: Programador Jr. para Python Primera Parte

El script raise.py

Page 165: Programador Jr. para Python Primera Parte

Evaluando resultados con assert

● La expresión assert es útil cuando se conoce el resultado esperado de un programa.

● La expresión assert levanta una excepción de tipo AssertionError si una condición no es verdadera.

assert(<condición>)

Page 166: Programador Jr. para Python Primera Parte

El script assert.py

Page 167: Programador Jr. para Python Primera Parte

ORIENTACIÓN A OBJETOS

Page 168: Programador Jr. para Python Primera Parte

Python está orientado a objetos

● Todos los elementos de Python son objetos, incluyendo los que podrían ser datos de tipos básicos como los números (int, float, complex), las cadenas de caracteres (str) y los booleanos (bool).

● Los tipos básicos están diseñados para comportarse de tal forma que un programador no requiera de utilizar el paradigma de programación de objetos en lo absoluto.

Page 169: Programador Jr. para Python Primera Parte

Clases y tipos● En Python los tipos de datos en realidad son

clases.● Una clase es el "prototipo" que ostenta las

características iniciales y define el comportamiento que adquirirán los objetos que se "instanciarán" de ésta.

● Cuando el intérprete de Python evalúa una declaración, éste infiere el tipo de dato del que se trata a partir de su sintaxis e instancia de esta clase un objeto en el que almacena el dato obtenido.

Page 170: Programador Jr. para Python Primera Parte

La función isinstance()

● Para validar si un objeto es una instancia de una clase, se utiliza la función isinstance(), la cual devolvería un valor True en caso de que así fuera.

Page 171: Programador Jr. para Python Primera Parte

Ejemplo de creación de objetos.● El intérprete crea a un objeto de clase

int que contiene un valor de 3 y un objeto de clase str que contiene al texto "Hola ".

● La clase str define un comportamiento específico cuando se encuentra con el operador * y un objeto de tipo int.

● El resultado es un nuevo objeto de tipo str que contiene al texto "Hola Hola Hola ".

● El objeto nuevo es desplegado.

● Todos los objetos son desechados tan pronto como son utilizados.

Page 172: Programador Jr. para Python Primera Parte

Persistencia de los objetos

● En este caso, ocurre algo muy similar a lo anterior, pero el objeto no es destruido inmediatamente.

● Un objeto puede ser ligado a un nombre en el espacio de nombres mediante el operador de asignación = o la expresión as.

● El objeto perdurará hasta que sea eliminada toda referencia a éste en el espacio de nombres, o hasta que el intérprete se cierre.

Page 173: Programador Jr. para Python Primera Parte

Comportamiento y contenido en los objetos.

● Los objetos adquieren los comportamientos propios de la clase de la que fueron instanciados. A éstos se les denominan "métodos".

● Los objetos pueden almacenar datos en incluso a otros objetos. A éstos se les llaman "atributos".

● Tanto métodos como atributos tienen un nombre por el cual pueden ser accedidos e invocados con la siguiente sintaxis que utiliza al punto (.) como "operador de atributo".

<objeto>.<atributo><objeto>.<método>(<parámetros>)

Page 174: Programador Jr. para Python Primera Parte

Invocando a un método

● En los objetos de tipo str, existe el método denominado __mul__(), que es el encargado del comportamiento de este tipo de objetos ante el operador *

Page 175: Programador Jr. para Python Primera Parte

Introspección

● Introspección es la capacidad que tiene Python de obtener información y documentación de un objeto a partir del código y los comentarios de dicho código (mediante las docstrings).

● Las funciones dir() y help() son herramientas que ayudan al usuario a encontrar información útil en el entorno interactivo.

Page 176: Programador Jr. para Python Primera Parte

La función dir()

● La función dir() ejecuta un listado de los métodos y atributos que contiene un objeto.

Page 177: Programador Jr. para Python Primera Parte

La función help()

● La función help() despliega la información sobre la estructura y documentación de un objeto en el entorno interactivo.

● help() también despliega algunos otros datos a partir de ciertas palabras clave en formato de cadena de texto como "keywords", "modules" o "topics", etc.

● Si se usa help() sobre un objeto de tipo str, es posible que se obtenga un error si su contenido no coincide con alguna palabra clave como las mencionadas.

Page 178: Programador Jr. para Python Primera Parte

Ejemplo: help(str)

Page 179: Programador Jr. para Python Primera Parte

Navegación dentro de help()

● Debido a que el contenido desplegado por help() generalmente se extiende más allá de la capacidad de la pantalla, al ejecutar la función, el entorno interactivo cambia a un modo de lectura en el cual uno se puede trasladar a lo largo del texto de ayuda con las teclas de <arriba>, <abajo>, <avpág>, <repág>, <inicio> y <fin>.

● Para salir del modo de lectura sólo es necesario ingresar la tecla q.

Page 180: Programador Jr. para Python Primera Parte

MÁS TIPOS DE DATOS

Page 181: Programador Jr. para Python Primera Parte

Tipos predeterminados de Python

● Debido a que los tipos de datos en Python son equiparables a las clases, extenderlos no sólo posible, sino muy común.

● Python cuenta con un conjunto de tipos predeterminados que el intérprete adquiere por defecto.

NOTA: Conforme a los alcances de este curso, se enumerarán la mayoría de los tipos, pero algunos de éstos no serán estudiados.

Page 182: Programador Jr. para Python Primera Parte

Clasificación de tipos.● Tipo booleanos (vistos previamente).● Tipos numéricos (vistos previamente).● Tipos secuenciales.● Tipos de colección.● Tipos mapeados.● Tipos de archivo.

Page 183: Programador Jr. para Python Primera Parte

Tipos de datos secuenciales.

● Listas list● Tuplas tuple● Cadenas de texto str● Archivos file● Texto unicode unicode (no se cubrirá)● Arreglo de bytes bytearray (no se cubrirá)● xrange (no se cubrirá)● buffer (no se cubrirá)

Page 184: Programador Jr. para Python Primera Parte

Tipos de datos de conjuntos.

● Conjuntos set● frozenset

Page 185: Programador Jr. para Python Primera Parte

Listas

Definidas entre corchetes “[“ “]”● Separadas por comas.● Los elementos de una lista también pueden ser una

lista o cualquier objeto.● Ejemplos:

● [“azul”, 3.2, “verde”, 45, True]● ["superficie", "perímetro", ["base", "altura"]]● [[“helicóptero”, “millas”, 230], [“autobús, “kilómetros”,

120, False]]

Page 186: Programador Jr. para Python Primera Parte

Indexado de elementos en listas

● La posición de un elemento de la lista corresponde a un número a partir de 0 de izquierda a derecha o a partir de -1 de derecha e izquierda.

Page 187: Programador Jr. para Python Primera Parte

Modificación de elementos en listas● Es posible modificar los contenidos de un

elemento de una lista mediante el operador de asignación "=" , sin embargo, no se pueden añadir elementos por este procedimiento.

<lista>[<índice>] = <valor>

Page 188: Programador Jr. para Python Primera Parte

Eliminación de un elemento de la lista

● Para desligar un elemento de una lista se utiliza la declaración del.

del <lista>[<índice>]

Page 189: Programador Jr. para Python Primera Parte

Concatenación y multiplicación de listas

● Es posible concatenar una lista con el operador "+" .

● El operador "*" repite y concatena una lista el número de veces que se indique.

Page 190: Programador Jr. para Python Primera Parte

Algunas funciones para listas

● len(<lista>) da el tamaño de la lista.● max(<lista>) despliega el elemento mayor de

la lista.● min(<lista>) despliega el elemento menor de la

lista.● sum(<lista>) despliega la suma de la lista.

Page 191: Programador Jr. para Python Primera Parte

Algunas funciones para listas

Page 192: Programador Jr. para Python Primera Parte

Algunos métodos de las listas● <lista>.append(valor) añade un valor al final de

la lista.

● <lista>.insert(posición, valor) añade un valor en la posición indicada, desplazando el resto de los elementos de la lista.

● <lista>.remove( valor) elimina el primer elemento que sea igual al valor indicado.

● <lista>.reverse( ) invierte el orden de la lista.

● <lista>.sort( ) ordena de forma ascendente los elementos de la lista.

● <lista>.pop( ) elimina el último elemento de la lista y regresa su valor.

Page 193: Programador Jr. para Python Primera Parte

Algunos métodos de las listas

Page 194: Programador Jr. para Python Primera Parte

Efecto de espejo (Aliasing)

● Debido a que las estructuras de datos son objetos, cuando utilizamos el operador de asignación "=", no se crea una nueva lista con un nombre distinto a la lista original, sino que se le da otro nombre a la lista (alias).

Page 195: Programador Jr. para Python Primera Parte

Efecto de espejo al asignar nombres a listas

(Alias)

Page 196: Programador Jr. para Python Primera Parte

"Rebanado" de listas

● Es posible extraer elementos de una lista dentro de un rango.

● <lista nueva> = <lista>(<índice_inicial>:<índice_final>)

● El resultado del rebanado será una nueva lista de elementos que van del índice inicial al anterior al índice final.

Page 197: Programador Jr. para Python Primera Parte

"Rebanado" de listas

● Es posible copiar hasta cierto nivel una lista mediante el "rebanado".

Page 198: Programador Jr. para Python Primera Parte

Rebanado de listas que contienen otros objetos

● El rebanado en las listas no es exhaustivo, por lo que los objetos dentro de las lista siguen sufriendo del efecto espejo.

● A este rebanado no exhaustivo se le llama "shallow copy".

● Más adelante se discutirá el tema de "deep copy".

Page 199: Programador Jr. para Python Primera Parte

Rebanado de listas que contienen otros objetos

Page 200: Programador Jr. para Python Primera Parte

El script for_lista.py

Page 201: Programador Jr. para Python Primera Parte

Uso de for con listas

Page 202: Programador Jr. para Python Primera Parte

TuplasDefinidas entre paréntesis “(“ “)”● Separadas por comas.● Las tuplas pueden ser indexadas como las listas.● No pueden cambiar sus valores.● No es posible eliminar un elemento de la tupla con del. ● No cuentan con los métodos de las listas.● Los operadores "+" y "*" pueden ser utilizados.● Es posible "rebanar" las tuplas.● Es posible usar la función len() en las tuplas.

Page 203: Programador Jr. para Python Primera Parte

Tuplas

Page 204: Programador Jr. para Python Primera Parte

Diccionarios

Los diccionarios son listas en la que los índices en vez de ser numéricos, corresponden a un identificador de tipo cadena de caracteres.● Definidas entre llaves “{“ “}”

● Separadas por comas.● Formato: <Identificador> : <objeto>● El identificador es inmutable y representa un

mapeo de los objetos.● No pueden ser concatenados.

Page 205: Programador Jr. para Python Primera Parte

Indexado de diccionarios

● A diferencia de las listas, el indexado de un diccionario no corresponde a una secuencia de números, sino al conjunto de los identificadores.

● Los identificadores de los diccionarios pueden ser de cualquier tipo.

Page 206: Programador Jr. para Python Primera Parte

Modificación de elementos en diccionarios

● Es posible modificar los contenidos de un elemento de un diccionario mediante el operador de asignación "=" , sin embargo, no se pueden añadir elementos por este procedimiento.

● Los identificadores no pueden modificarse.

<diccionario>[<identificador>] = <valor>

Page 207: Programador Jr. para Python Primera Parte

Adición de elementos a un diccionario

● Para añadir un elemento se hace lo siguiente:

<diccionario>[<identificador nuevo>] = <valor>

Page 208: Programador Jr. para Python Primera Parte

Eliminación de un elemento de un diccionario

● Para eliminar un elemento de un diccionario se utiliza la declaración del.

del <diccionario>[<identificador>]

Page 209: Programador Jr. para Python Primera Parte

Funciones para diccionarios

● len (<lista>) da el número de elementos en el diccionario.

● Es posible usar max() y min() para identificar el identificador de mayor valor como cadena de caracteres.

Page 210: Programador Jr. para Python Primera Parte

Algunos métodos de diccionarios

● <diccionario>.items() regresa los elementos de un diccionario como una lista de de tuplas.

● <diccionario>.keys() regresa los identificadores de un diccionario como una lista.

● <diccionario>.iteritems() regresa un iterador conteniendo cada elemento del diccionario como una tupla.

● <diccionario>.iterkeys() regresa un iterador conteniendo cada identificador del diccionario.

● <diccionario>.itervalues() regresa un iterador conteniendo cada valor del diccionario.

Page 211: Programador Jr. para Python Primera Parte

Métodos de diccionarios en Python 3

En Python 3 los siguientes métodos fueron descartados.● iteritems() ● iterkeys() ● itervalues()

Page 212: Programador Jr. para Python Primera Parte

El script for_diccionarios.py

Page 213: Programador Jr. para Python Primera Parte

El script for_diccionarios.py

Page 214: Programador Jr. para Python Primera Parte

Cadenas de caracteres● Las cadenas de caracteres son estructuras de

datos que contienen caracteres.● Los elementos de una cadena de caracteres

pueden ser indexados.● Los elementos de la cadena no pueden modificarse

mediante el operador "=" ● Los elementos de la cadena no pueden modificarse

mediante del. ● Las cadenas pueden concatenarse y multiplicarse.● Las cadenas pueden ser "rebanadas".● Es posible usar len() para conocer el tamaño de la

cadena.

Page 215: Programador Jr. para Python Primera Parte

Cadenas de caracteres

Page 216: Programador Jr. para Python Primera Parte

Algunos métodos de las cadenas

● <cadena>.upper() transforma en mayúsculas todos los elementos de la cadena.

● <cadena>.lower() transforma en minúsculas todos los elementos de la cadena.

● <cadena>.capitalize() transforma el primer carácter de una cadena en mayúsculas.

● <cadena>.isdigit() regresa un valor verdadero si la cadena está compuesta sólo por dígitos.

Page 217: Programador Jr. para Python Primera Parte

Algunos métodos de las cadenas

Page 218: Programador Jr. para Python Primera Parte

El script for_cadena.py

Page 219: Programador Jr. para Python Primera Parte

Conjuntos● A diferencia de las estructuras de datos previas, las

colecciones de datos que no se encuentran ordenadas y cuyos elementos no se repiten.

● Este tipo de datos están diseñados para ajustarse a la teoría de conjuntos.

● No son indexables, ni rebanables.● Sólo soportan la función len()● Los conjuntos se crean mediante el comando set()

<nuevo_set> = set(<lista>)

Page 220: Programador Jr. para Python Primera Parte

Algunos métodos para conjuntos● <set_1>.issubset(<set_2>) verifica si <set_1> es subconjunto

de <set_2>● <set_1>.issuperset(<set_2>) verifica si <set_2> es

subconjunto de <set_1>● <set_1>.union(<set_2>) regresa la unión entre <set_1> y

<set_2>● <set_1>.intersection(<set_2>) regresa la intersección entre

<set_1> y <set_2>● <set_1>.difference(<set_2>) regresa los elementos que están

en <set_1> pero no en <set_2>● <set_1>.symmetricdifference(<set_2>) regresa los

elementos que están en <set_1> o en <set_2>, pero no en ambos.

● <set>.copy() hace un shallow copy de <set>

Page 221: Programador Jr. para Python Primera Parte

Algunos métodos para conjuntos

Page 222: Programador Jr. para Python Primera Parte

Algunos métodos para conjuntos

● <set>.add(<elemento>) añade <elemento> a <set>● <set>.remove(<elemento>) elimina <elemento> de

<set>, marca un error en caso de que <elemento> no estuviera contenido en <set>

● <set>.discard(<elemento>) trata de eliminar <elemento> de <set> sin marcar error si no lo encuentra.

● <set>.pop() elimina un elemento arbitrariamente de <set>.

● <set>.clear() elimina todos los elementos de <set>.

Page 223: Programador Jr. para Python Primera Parte

Algunos métodos para conjuntos

Page 224: Programador Jr. para Python Primera Parte

El ejemplo de animales domésticos

Page 225: Programador Jr. para Python Primera Parte

El tipo frozenset

● El tipo frozenset es similar al tipo set, pero su contenido es inmutable.

● Los objetos de tipo frozenset no cuentan con métodos que los modifiquen.

Page 226: Programador Jr. para Python Primera Parte

Algunos métodos para frozenset● <frozenset_1>.issubset(<set_2>) verifica si <frozenset_1>

es subconjunto de <set_2>● <frozenset_1>.issuperset(<set_2>) verifica si <set_2> es

subconjunto de <frozenset_1>● <frozenset_1>.union(<set_2>) regresa la unión entre

<frozenset_1> y <set_2>● <frozenset_1>.intersection(<set_2>) regresa la intersección

entre <frozeset_1> y <set_2>● <frozenset_1>.difference(<set_2>) regresa los elementos

que están en <frozenset_1> pero no en <set_2>● <frozenset_1>.symmetricdifference(<set_2>) regresa los

elementos que están en <frozenset_1> o en <set_2>, pero no en ambos.

● <frozenset>.copy() hace un shallow copy de <frozenset>

Page 227: Programador Jr. para Python Primera Parte

Algunos ejemplos con frozenset

Page 228: Programador Jr. para Python Primera Parte

El operador in

● El operador in se utiliza para evaluar si un objetos está contenido dentro de una estructura. El resultado de este operador es un valor booleano.

Page 229: Programador Jr. para Python Primera Parte

El script poliglota.py

Page 230: Programador Jr. para Python Primera Parte

El script poliglota.py

Page 231: Programador Jr. para Python Primera Parte

FUNCIONES

Page 232: Programador Jr. para Python Primera Parte

Definición de funciones

● Las funciones son una serie de argumentos y expresiones que pueden ser invocadas durante la ejecución de un programa.

● Se utiliza la declaración def para crear una función.

● En Python, las funciones también son objetos.

def <nombre_función>(<argumentos>): <código>

Page 233: Programador Jr. para Python Primera Parte

Una función básica

● La función más simple que se pude hacer es una que no hace absolutamente nada.

● En este caso utilizaremos la expresión pass.

● Los comentarios contenidos en la primera docstring anidada en la función será identificada como la descripción de ésta al ejecutar help(funcion).

Page 234: Programador Jr. para Python Primera Parte

Una función básica

Page 235: Programador Jr. para Python Primera Parte

Funciones y flujo de ejecución ● El intérprete de Python sigue un orden lineal al

interpretar el código de un script.● Las funciones pueden ser invocadas sólo una

vez que son definidas.

Page 236: Programador Jr. para Python Primera Parte

Argumentos y parámetros en las funciones

● Al definir una función es posible designar "argumentos" cuyos valores podrían ser ingresados al invocar a dicha función.

● A los argumentos se les puede asignar valores iniciales que pueden ser reemplazados al ser invocados. En caso de no asignar un valor, se utilizará el valor inicial.

● A los datos ingresados al invocar una función se les llama "parámetros".

● Deben existir tantos parámetros como argumentos definidos en una función.

Page 237: Programador Jr. para Python Primera Parte

El script funcion_con_parametros.py

Page 238: Programador Jr. para Python Primera Parte

Ámbito (Scope).

● Cada objeto contiene su propio espacio de nombres.

● Al espacio de nombres de cada entidad se le conoce como "ámbito".

● Esta diferenciación de espacios de nombres evita colisiones entre 2 nombres idénticos en ámbitos distintos.

● El ámbito de una función existe hasta que la función termina de ejecutarse.

Page 239: Programador Jr. para Python Primera Parte

Ámbito global y local.● Ámbito global corresponde al espacio de

nombres principal del intérprete de Python.● Ámbito local corresponde al espacio de

nombres relacionado a un objeto.● Al invocar un nombre en una función, el

intérprete hace una búsqueda desde el ámbito local hacia el ámbito global y utiliza la referencia al primer nombre que coincida.

● En caso de no encontrar algún nombre se generará una excepción de tipo NameError indicando que el nombre no está definido.

Page 240: Programador Jr. para Python Primera Parte

Ámbito local y global

Page 241: Programador Jr. para Python Primera Parte

Las funciones globals() y locals()

● La función globals() regresa un diccionario que contiene a su vez el contenido del espacio de nombres principal.

● La función locals() regresa un diccionario que contiene a su vez el contenido del espacio de nombres de la función en la que se encuentra.

● Si se ejecuta locals() en el ámbito principal, el diccionario resultante será idéntico al de globals().

Page 242: Programador Jr. para Python Primera Parte

El script locals_globals.py

Page 243: Programador Jr. para Python Primera Parte

El script locals_globals.py

Page 244: Programador Jr. para Python Primera Parte

La declaración global

● Si quisiéramos que un nombre dentro de una función sea global podemos utilizar la declaración global.

def <nombre_función>(): global <nombre> <nombre> = <objeto> <código>

Page 245: Programador Jr. para Python Primera Parte

El script circulo.py

Page 246: Programador Jr. para Python Primera Parte

Funciones con un número arbitrario de parámetros

● En ocasiones se requiere que una función pueda aceptar un número indeterminado de parámetros.

● Existen dos maneras de hacerlo:● Ingresar los parámetros como una tupla.● Ingresar los parámetros como un diccionario.

Page 247: Programador Jr. para Python Primera Parte

Funciones que aceptan parámetros como tuplas (args)

● Para indicar al intérprete que la función puede aceptar una tupla en un argumento, se incluye un asterisco "*" como prefijo del argumento.

● Si la función requiere de otros argumentos, éstos deben ser definidos antes de insertar el argumento con parámetros múltiples.

def <nombre_función>(<argumentos_opcionales>, *<args>): <código>

Page 248: Programador Jr. para Python Primera Parte

El script promedio.py

Page 249: Programador Jr. para Python Primera Parte

El script promedio.py

Page 250: Programador Jr. para Python Primera Parte

Funciones que aceptan parámetros como diccionarios (kwargs)

● Para indicar al intérprete que la función puede aceptar un diccionario en un argumento, se incluye un asterisco (**) como prefijo del argumento.

def <nombre_función>(<argumentos_opcionales> **<kwargs>): <código>

Page 251: Programador Jr. para Python Primera Parte

El script superficies.py

Page 252: Programador Jr. para Python Primera Parte

El script superficies.py

Page 253: Programador Jr. para Python Primera Parte

Valores de retorno de las funciones

● Las funciones pueden regresar objetos con la expresión return.

● La expresión return funciona de modo similar a break.

def <nombre_función>(<argumentos>) ... ... <nombre> = <objeto> ... ... return <nombre>

Page 254: Programador Jr. para Python Primera Parte

El script calculo.py

Page 255: Programador Jr. para Python Primera Parte

MÓDULOS Y PAQUETES

Page 256: Programador Jr. para Python Primera Parte

Módulos

● Python cuenta con una gran biblioteca de módulos.

● Los módulos se pueden consultar ejecutando help("modules") en la interfaz interactiva.

● Los módulos pueden contener funciones y valores, clases y objetos.

Page 257: Programador Jr. para Python Primera Parte

Métodos de importación (i)

● import <module> carga el módulo seleccionado.

● Para invocar un componente del módulo se ejecuta <modulo>.<componente>

Page 258: Programador Jr. para Python Primera Parte

Métodos de importación (ii)

● from <modulo> import <componente> carga el componente seleccionado del módulo.

● El nombre del componente queda almacenado en el ámbito global.

Page 259: Programador Jr. para Python Primera Parte

Importación de un módulo

● Al importar un módulo, el intérprete de Python busca en los siguientes directorios en el orden especificado:● La ruta desde la que se ejecuta el script de Python.● Las rutas predefinidas por defecto por el intérprete de

Python.

● Al encontrar el primer módulo con el nombre indicado, el intérprete lo ejecuta de principio a fin.

● El intérprete crea un espacio de nombres propio del módulo el cual relaciona a los objetos creados durante su ejecución.

Page 260: Programador Jr. para Python Primera Parte

Archivos .pyc

● Al importar un módulo, Python genera un archivo "compilado" con extensión .pyc

● Los archivos .pyc contienen lo que se conoce como bytecode que optimiza la ejecución del módulo en cuestión.

● Si el módulo ha cambiado, Python genera un nuevo archivo .pyc al ser importado nuevamente.

Page 261: Programador Jr. para Python Primera Parte

Empalme en el espacio de nombres al importar

Page 262: Programador Jr. para Python Primera Parte

Prevención de empalmes con la expresión as

Page 263: Programador Jr. para Python Primera Parte

Recarga de un módulo

● La expresión import sólo se puede utilizar una vez sin tener que cerrar el intérprete/entorno.

● En caso de querer recargar un módulo se utiliza la función reload().

Page 264: Programador Jr. para Python Primera Parte

Funciones intrínsecas (built-in functions)

● El intérprete de Python al iniciar importa el módulo __builtin__, el cual contiene las funciones intrínsecas del lenguaje.

● Las funciones intrínsecas no deben confundirse con las "keywords" de Python.

Page 265: Programador Jr. para Python Primera Parte

Creación de módulos propios

● Cualquier script de Python que defina clases, objetos, funciones y/o valores es susceptible de ser un módulo en Python.

● En modo interactivo, los módulos deben estar en el directorio desde el que se está ejecutando la interfaz de Python o en las rutas predefinidas por el sistema.

Page 266: Programador Jr. para Python Primera Parte

El script cuenta_digitos.py

Page 267: Programador Jr. para Python Primera Parte

Ejemplo de un módulo de Python

● El módulo cuenta_digitos define las funciones digito_en_conteo() y programa().

● Además hay una línea al final del módulo que manda a ejecutar a la función programa()

● Al importarse el módulo por primera vez, éste se ejecuta, pero no cuando se importa por segunda vez.

Page 268: Programador Jr. para Python Primera Parte

Configuración de rutas

● El módulo sys de Pyhton contiene varias funciones y variables del entorno de ejecución de Python.

● Una de estas variables es el "path" de python, el cual define las rutas dentro del sistema de archivos a los que Python puede recurrir para buscar archivos.

● sys.path es donde se guarda el valor de la ruta como una lista de cadenas de texto.

● Para incluir una ruta de búsqueda es necesario añadirla mediante la instrucción:

sys.path.append(<ruta>)

Page 269: Programador Jr. para Python Primera Parte

Ejemplo del uso de un módulo propio

Page 270: Programador Jr. para Python Primera Parte

Ejecución de un archivo .py como un script o como un módulo

● Cuando un archivo es cargado como un módulo, la variable interna __name__ adquiere el nombre del módulo.

● Cuando un archivo es cargado como un script, la variable interna __name__ adquiere el nombre "__main__".

● De ese modo, es posible definir si el flujo dentro del archivo se ejecuta o no, dependiendo si es un módulo o un script.

Page 271: Programador Jr. para Python Primera Parte

El script cuenta_digitos_mod.py

Page 272: Programador Jr. para Python Primera Parte

El script modulo_cuenta_digitos.py

Al ser ejecutado en la línea de comando:

Al ser importado en el entorno interactivo:

Page 273: Programador Jr. para Python Primera Parte

Paquetes

● A un grupo de módulos se le llama paquete.● Los paquetes son una estructura de

subdirectorios jerárquicos.● En cada subdirectorio debe haber un archivo

__init__.py el cual puede servir para inicializar los valores de los módulos localizados en dicho subdirectorio.

● Es posible dejar archivos __init__.py vacíos.

Page 274: Programador Jr. para Python Primera Parte

Estructura de los paquetes

● En Windows, el paquete mail se localiza en C:\Python27\Lib\email

Page 275: Programador Jr. para Python Primera Parte

Estructura de los paquetes

● A su vez, el paquete mail.mime se localiza en C:\Python27\Lib\email\mime

Page 276: Programador Jr. para Python Primera Parte

Invocación de módulos dentro de paquetes

Page 277: Programador Jr. para Python Primera Parte

Acceso a la introspección de módulos y paquetes

Es posible acceder a la información de un módulo importado o de uno de sus componentes mediante la función help()

help(<modulo>)help(<modulo>.<componente>)

Page 278: Programador Jr. para Python Primera Parte

Introspección de módulos y paquetes

Page 279: Programador Jr. para Python Primera Parte

Ejemplo del uso de help()

Page 280: Programador Jr. para Python Primera Parte

Gestión de proyectos con Ninja-IDE

● Ninja-IDE cuenta con la funcionalidad de crear proyectos, los cuales son una serie de archivos modulares.

● Algunos atajos relativos a los proyectos son:● Ctrl+Shift+N: Crea un nuevo proyecto.● Ctrl+Shift+O: Abre un proyecto.● Ctrl+Shift+S: Guarda un proyecto.● F6: Corre un proyecto.

Page 281: Programador Jr. para Python Primera Parte

CASO DE ESTUDIO

Page 282: Programador Jr. para Python Primera Parte

Control escolar

Nombre de Pila str

Primer Apellido str

Segundo Apellido str

Semestre int

Promedio float

Al Corriente bool

Una escuela desea realizar el control escolar de sus alumnos con los siguientes campos.

Page 283: Programador Jr. para Python Primera Parte

Control escolarPor el momento sólo cuenta con la información de 5 alumnos:

Nombre Primer Apellido

Segundo Apellido

Carrera Semestre Promedio Al Corriente

Eduardo Sánchez Ramos Sistemas 6 7.5 True

Alberto Durán Montellano Derecho 2 6.3 True

Joaquín Ausencio Olvera Actuaría 2 5.2 False

Emiliano Rentería Administración 4 8.7 True

Patricio Ayala Arriaga Sistemas 5 8.0 True

Page 284: Programador Jr. para Python Primera Parte

Control escolar

La escuela cuenta con 5 carreras:

Sistemas

Derecho

Actuaría

Arquitectura

Administración

Page 285: Programador Jr. para Python Primera Parte

Control Escolar● Hay que crear un sistema que genere una lista de los

alumnos con todos sus datos.● Hay que crear un sistema de altas de nuevos

alumnos.● Hay que validar cada campo:

● Que los semestres sean positivos.● Que el nombre y primer apellido no estén vacíos.● Pedir confirmación en caso de dejar vacío el campo de

segundo apellido.● Que las carreras sean las indicadas.● Que el promedio sea mayor o igual que 0 y menor o igual a

10.● Que cada dato corresponda a su tipo.

Page 286: Programador Jr. para Python Primera Parte

Módulo datos.py

Page 287: Programador Jr. para Python Primera Parte

Módulo valida.py

Page 288: Programador Jr. para Python Primera Parte

Módulo listado.py

Page 289: Programador Jr. para Python Primera Parte

Módulo altas.py

Page 290: Programador Jr. para Python Primera Parte

__init__.py

Page 291: Programador Jr. para Python Primera Parte

Trabajo a realizar

● El código contiene pocos comentarios.● Analice y realice comentarios al código.

Page 292: Programador Jr. para Python Primera Parte

Acceso al código● Puede descargar todo el código de este curso, incluyendo

el subdirectorio caso desde:

https://docs.google.com/file/d/0B-tF2kZLbAXPN0dZX1ZHTUJqUkE/edit?usp=sharing

● El código del caso de uso se encuentra en el subdirectorio caso.

● El contenido puede ser abierto en el directorio como un proyecto de NINJA-IDE.

● También pueden modificar sys.path indicando la dirección donde se encuentre e importando el directorio como un módulo:

import syssys.path.append("<ruta>")import caso

Page 293: Programador Jr. para Python Primera Parte

ESCRITURA/LECTURA DE ARCHIVOS

Page 294: Programador Jr. para Python Primera Parte

Gestión de archivos de texto

● Los archivos en Python pertenecen al tipo file.● Para crear un objeto de tipo file se utiliza la

función open().

<archivo> = open(<nombre_archivo>, <modo>)

Page 295: Programador Jr. para Python Primera Parte

Modos de acceder a archivos

● "r" es el modo de lectura.● "w" es un modo de escritura. En caso de existir

un archivo, éste es sobreescrito.● "a" es un modo de escritura. En caso de existir

un archivo, comienza a escribir al final de éste.● "b" permite escritura en modo binario.● "U" define saltos de línea universales para el

modo de lectura.● Se utiliza el signo de "+" para combinar modos.

Page 296: Programador Jr. para Python Primera Parte

Algunos métodos para archivos

● <file>.read() lee el archivo completo.● <file>.readline() lee una línea del archivo.● <file>.readlines() regresa una lista de todas las líneas

del archivo.● <file>.write(<cadena>) escribe una <cadena> en el

archivo.● <file>.tell() regresa la posición del puntero en el archivo.● <file>.seek(<rango>, <posición>) mueve el puntero.● <file>.close() cierra el archivo.

Page 297: Programador Jr. para Python Primera Parte

Escritura/lectura de archivos.

Page 298: Programador Jr. para Python Primera Parte

El archivo texto.txt

Page 299: Programador Jr. para Python Primera Parte

La expresión with

● Es posible crear un proceso "sanitizado" con with.

● Lo anterior permite a ciertos objetos como los de tipo file un comportamiento muy similar a utilizar finally.

● En este caso, incluso cuando ocurra una excepción, el archivo se cerrará automáticamente, evitando posible corrupción de los archivos.

with open( <archivo>, <modo>) as <nombre>:

Page 300: Programador Jr. para Python Primera Parte

Revisitando el caso de uso

● A partir del caso de uso estudiado con anticipación se leerán y escribirán los datos de los alumnos en el archivo:● datos.txt

● Se modificarán los módulos:● __init__.py● datos.py● listado.py

Page 301: Programador Jr. para Python Primera Parte

datos.txt

Page 302: Programador Jr. para Python Primera Parte

datos.py

Page 303: Programador Jr. para Python Primera Parte

__init__.py

Page 304: Programador Jr. para Python Primera Parte

listado.py

Page 305: Programador Jr. para Python Primera Parte

Open Intelligence® http://[email protected]

+52(55) 3548-1400

Algunos derechos reservados. Esta obra puede ser modificada, redistribuida y comercializada bajo los términos de la licencia Atribución 2.5 México (CC BY 2.5) http://creativecommons.org/licenses/by/2.5/mx/