SlideShare una empresa de Scribd logo
1 de 305
Descargar para leer sin conexión
Programador Jr. para Python.
Primera parte.

Diciembre 2013.
José Luis Chiquete Valdivieso
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
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.
Temario (ii)
●

Más tipos de datos.

●

Funciones.

●

Módulos y paquetes.

●

Caso de estudio.

●

Escritura y lectura de archivos.
INTRODUCCIÓN
¿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".
●
¿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.).
Índice TIOBE de popularidad de los lenguajes de
programación (Octubre 2013).

http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
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.
●
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.
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
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).
Interfaz interactiva de Python
Interfaz interactiva de Python
●

Para salir de la interfaz interactiva se invoca a
exit()
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.
●
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.
●
Lenguajes de programación

Lenguajes artificiales utilizados para
ingresar valores y dar instrucciones a
un sistema.
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.).
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.
Python es...

●

Un lenguaje de alto nivel.

●

Un lenguaje interpretado.

●

Que soporta múltiples paradigmas
de programación.
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.
●
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.
●
El Zen de Python
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.
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.
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!
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.
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
IDE para Python
●

IDLE.

●

devpy para Eclipse.

●

SPE.

●

Boa Constructor.

●

Vim.

●

Emacs.

●

Gedit.

●

Wing IDE.

●

Komodo.

●

Ninja IDE.
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).
Ninja-IDE
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.
Configuración de Ninja-IDE
●

En Windows es necesario indicarle a Ninja-IDE
la localización del archivo ejecutable de
Python.
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.
Ventanas del shell interactivo
Ventana del código
Ventana de ejecución
Hola Mundo
●

En la interfaz interactiva.

●

Como script.

●

Ejecutable.

print "Hola Mundo"
Hola Mundo en la Interfaz
Interactiva
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.
El script holamundo.py
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>
Permisos de ejecución en *NIX
Ejecutando holamundo.py desde
terminal
Ejecutando holamundo.py desde
Ninja-IDE
●

Al oprimir Ctrl+F6 en Ninja-IDE el script se ejecuta de
esta manera:
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.
Script holamundo.py con raw_input()
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.
El script holaninos.py
PALABRAS RESERVADAS Y ESPACIO DE
NOMBRES
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.
Palabras reservadas de Python 2.7
Palabras reservadas de Python 3.3
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.
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.
El operador de asignación =
La función dir()
●

Cuando se ejecuta dir() sin ningún
parámetro, éste despliega los nombres
contenidos en el espacio de nombres
principal.
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.
Sintaxis para nombres
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.
La función id()
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.
La declaración del
EXPRESIONES Y DECLARACIONES
Expresiones
Una expresión es una combinación de valores,
operadores y variables.
●

1+1

●

"azul" + " rojo"

●

print "Hola"
Declaraciones (Statements)
●

Es una unidad de código que el intérprete de
Python puede ejecutar.
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.
Expresiones en entorno interactivo
●

La interfaz interactiva evalúa las expresiones
tan pronto como son ingresadas y en su caso,
despliega el resultado.
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.
El script expresiones.py
TIPOS DE DATOS BÁSICOS Y
OPERADORES
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)
–

●

Cadenas de texto (str)
●

Encerradas entre comillas "" o apóstrofes ''
–
–

●

3 + 45j, 1j

'Hola Mundo'
"Vamos al McDonald's"

Valores booleanos(bool)
●

True/False
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.
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
Ejemplo del uso de tipos
Ejemplo del uso de tipos
Operadores aritméticos
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

//

División entera

%

Módulo

x = 1.0 / 2 # x es 0.5 *
x = 1.0 // 2 #x es 0.0
x = 1.0 % 2 #x es 1

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.
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

/=

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

x %= y equivale a x = x % y
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
Operadores de bit
Operador

Descripción

Ejemplo
a = 23 = 0b10111
b = 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
Operadores de cadena
Operador

Descripción

+

Concatenación

*

Repetición

Ejemplo
a = ”Hola” b = ”Mundo”
c=a+b
# c es “HolaMundo”
a = ”Hola”
b=c*3
# c es “HolaHolaHola”
Operadores de relación
Operador
==
!=
>
<
>=
<=

a == b
a != b
a>b
a<b
a >= b
a <= b

Evalúa
# ¿a igual a b?
# ¿a distinta de b?
#¿a mayor que b?
#¿a menor que b?
#¿a mayor o igual que b?
#¿a menor o igual que b?
Operadores Booleanos
Operador
or
and
not

Evalúa
a or b # ¿Se cumplen a o b?
a and b # ¿Se cumple a y b?
not a # ¿no es A?
Operador de identidad
●

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

Operador
is
is not

Evalúa
a is b #equivale a id(a) == id(b)
a is not b #equivale a id(a) != id(b)
ENTRADA Y SALIDA ESTÁNDAR
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.
print en Python 2
print() en Python 3

●

Python 2.7 es una versión de transición,
por lo que acepta ambas sintaxis.
print y print() en Python 2.7
●

●

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

Para los alcances de este curso se usará la
sintaxis de Python 2.
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.
s
d

entero

o

octal

x

hexadecima

f

punto flotante

e
●

cadena de texto

Punto flotante en formato exponencial

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.
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 %%.
Despliegue con formato
●

Para desplegar el signo de porcentaje "%" se
utiliza %%.
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.
Caracteres de escape
Secuencia

Acción

n

retorno

t

tabulador

xXX

carácter ASCII hexadecimal

'

apóstrofe

"

comillas



diagonal invertida
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.
eval (<cadena de texto>)

●

Cuando una cadena de texto no contenga una
expresión válida, eval() generará un mensaje
de error.
La función eval()
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.
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>)
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.
raw_input() vs input()
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.
FLUJO DE EJECUCIÓN
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.
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.
El script hola_comentado.py
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).
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.
Condicional if
El script if_simple.py
Condicional if... else
El script if_else.py
Condicional if... elif... else
El script if_elif_else.py
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.
El script while.py
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.
Terminación del bucle actual con
continue

●

Es posible terminar un subproceso de manera
prematura con continue.
Terminación del bucle actual con
continue

●

Es posible terminar un subproceso de manera
prematura con continue.
El script while_continue.py
Ruptura del bucle con break
●

Es posible terminar el bucle con break.
El script while_break.py
Terminación de la ejecución con exit()
●

El intérprete termina la ejecución del scritp a
ser invocada la función exit()
El script while_exit.py
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()
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
El script for_simple.py
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.
GESTIÓN DE EXCEPCIONES
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.
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).
Excepciones
●

Las excepciones son errores lógicos que
detienen la ejecución del programa aún cuando
la sintaxis del código sea correcta.
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.
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.
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.
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.
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.
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ó.
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
Posibles tipos de excepciones en el
script excepcion_probable.py
●

NameError

●

ValueError
Posibles tipos de excepciones en el
script excepcion_probable.py
●

TypeError

●

SyntaxError
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
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.
Gestión de excepciones con except
●

●

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.
...
...
try:
<código suceptible de errores>
except:
<código>
...
...
El script excepcion_basica.py
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.
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.
El script excepcion_simple.py
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.
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>
...
...
El script
excepciones_identificadas.py
El script
excepciones_identificadas.py
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>
...
...
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.
El script excepciones_descritas.py
El script excepciones_descritas.py
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>
...
...
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.
Uso de finally
..
...
try:
<código suceptible de errores>
except:
<código1>
...
...
else:
<código2>
...
...
finally:
<código3>
...
...
El script excepciones_atrapadas.py
El script excepciones_atrapadas.py
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>)
El script raise.py
El script raise.py
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>)
El script assert.py
ORIENTACIÓN A OBJETOS
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.
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.
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.
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.
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.
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>)
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 *
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.
La función dir()
●

La función dir() ejecuta un listado de los
métodos y atributos que contiene un objeto.
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.
Ejemplo: help(str)
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.
MÁS TIPOS DE DATOS
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.
Clasificación de tipos.
●

Tipo booleanos (vistos previamente).

●

Tipos numéricos (vistos previamente).

●

Tipos secuenciales.

●

Tipos de colección.

●

Tipos mapeados.

●

Tipos de archivo.
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á)
Tipos de datos de conjuntos.

●

Conjuntos set

●

frozenset
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]]
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.
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>
Eliminación de un elemento de la
lista
●

Para desligar un elemento de una lista se
utiliza la declaración del.
del <lista>[<índice>]
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.
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.
Algunas funciones para listas
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.
Algunos métodos de las listas
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).
Efecto de espejo al asignar
nombres a listas
(Alias)
"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.
"Rebanado" de listas
●

Es posible copiar hasta cierto nivel una lista
mediante el "rebanado".
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".
Rebanado de listas que contienen
otros objetos
El script for_lista.py
Uso de for con listas
Tuplas
Definidas 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.
Tuplas
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.
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.
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.
<diccionario>[<identificador>] = <valor>

●

Los identificadores no pueden modificarse.
Adición de elementos a un
diccionario
●

Para añadir un elemento se hace lo siguiente:
<diccionario>[<identificador nuevo>] = <valor>
Eliminación de un elemento de un
diccionario
●

Para eliminar un elemento de un diccionario se
utiliza la declaración del.
del <diccionario>[<identificador>]
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.
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.
Métodos de diccionarios en Python 3

En Python 3 los siguientes métodos fueron
descartados.
●

iteritems()

●

iterkeys()

●

itervalues()
El script for_diccionarios.py
El script for_diccionarios.py
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.
Cadenas de caracteres
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.
Algunos métodos de las cadenas
El script for_cadena.py
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>)
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>
Algunos métodos para conjuntos
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>.
Algunos métodos para conjuntos
El ejemplo de animales domésticos
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.
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>
Algunos ejemplos con frozenset
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.
El script poliglota.py
El script poliglota.py
FUNCIONES
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.
def <nombre_función>(<argumentos>):
<código>

●

En Python, las funciones también son objetos.
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).
Una función básica
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.
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.
El script funcion_con_parametros.py
Á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.
Á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.
Ámbito local y global
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().
El script locals_globals.py
El script locals_globals.py
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>
El script circulo.py
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.
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>
El script promedio.py
El script promedio.py
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>
El script superficies.py
El script superficies.py
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>
El script calculo.py
MÓDULOS Y PAQUETES
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.
Métodos de importación (i)
●

●

import <module> carga el módulo
seleccionado.
Para invocar un componente del módulo se
ejecuta <modulo>.<componente>
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.
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.
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.
Empalme en el espacio de nombres
al importar
Prevención de empalmes con la
expresión as
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().
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.
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.
El script cuenta_digitos.py
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.
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>)
Ejemplo del uso de un módulo
propio
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.
El script cuenta_digitos_mod.py
El script modulo_cuenta_digitos.py
Al ser ejecutado en la línea de comando:

Al ser importado en el entorno interactivo:
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.
Estructura de los paquetes
●

En Windows, el paquete mail se localiza en
C:Python27Libemail
Estructura de los paquetes
●

A su vez, el paquete mail.mime se localiza en
C:Python27Libemailmime
Invocación de módulos dentro de
paquetes
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>)
Introspección de módulos y paquetes
Ejemplo del uso de help()
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.
CASO DE ESTUDIO
Control escolar
Una escuela desea realizar el control escolar de sus
alumnos con los siguientes campos.
Nombre de Pila

str

Primer Apellido

str

Segundo Apellido

str

Semestre

int

Promedio

float

Al Corriente

bool
Control escolar
Por 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

Sistemas

5

8.0

True

Arriaga
Control escolar
La escuela cuenta con 5 carreras:

Sistemas
Derecho
Actuaría
Arquitectura
Administración
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.
Módulo datos.py
Módulo valida.py
Módulo listado.py
Módulo altas.py
__init__.py
Trabajo a realizar

●

El código contiene pocos comentarios.

●

Analice y realice comentarios al código.
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-tF2kZLbAXPN0dZX1ZH
TUJqUkE/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 sys
sys.path.append("<ruta>")
import caso
ESCRITURA/LECTURA DE
ARCHIVOS
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>)
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.
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.
Escritura/lectura de archivos.
El archivo texto.txt
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>:
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
datos.txt
datos.py
__init__.py
listado.py
Open Intelligence®
http://openintelligence.mx
info@openintelligence.mx
+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/

Más contenido relacionado

La actualidad más candente

Python, the Language of Science and Engineering for Engineers
Python, the Language of Science and Engineering for EngineersPython, the Language of Science and Engineering for Engineers
Python, the Language of Science and Engineering for EngineersBoey Pak Cheong
 
Python final presentation kirti ppt1
Python final presentation kirti ppt1Python final presentation kirti ppt1
Python final presentation kirti ppt1Kirti Verma
 
Get started python programming part 1
Get started python programming   part 1Get started python programming   part 1
Get started python programming part 1Nicholas I
 
Procedimiento - Instalación de Drivers
Procedimiento - Instalación de DriversProcedimiento - Instalación de Drivers
Procedimiento - Instalación de DriversJosé Quiñonez
 
Python Programming language
Python Programming languagePython Programming language
Python Programming languageHadeelAlbedah
 
Why I Love Python
Why I Love PythonWhy I Love Python
Why I Love Pythondidip
 
Codigo intermedio
Codigo intermedioCodigo intermedio
Codigo intermedioEmanuel Gs
 
Python presentation by Monu Sharma
Python presentation by Monu SharmaPython presentation by Monu Sharma
Python presentation by Monu SharmaMayank Sharma
 
Ensamblaje y seleccion de componentes de una computadora
Ensamblaje y seleccion de componentes de una computadoraEnsamblaje y seleccion de componentes de una computadora
Ensamblaje y seleccion de componentes de una computadoramirkaramos
 
Introduction To Python | Edureka
Introduction To Python | EdurekaIntroduction To Python | Edureka
Introduction To Python | EdurekaEdureka!
 
Python Programming ppt
Python Programming pptPython Programming ppt
Python Programming pptismailmrribi
 
Presentation on python
Presentation on pythonPresentation on python
Presentation on pythonwilliam john
 
Best Python IDEs
Best Python IDEsBest Python IDEs
Best Python IDEsBenishchoco
 
Eclipse Modeling Framework
Eclipse Modeling FrameworkEclipse Modeling Framework
Eclipse Modeling FrameworkAjay K
 
An introduction to Python for absolute beginners
An introduction to Python for absolute beginnersAn introduction to Python for absolute beginners
An introduction to Python for absolute beginnersKálmán "KAMI" Szalai
 
Introduction to python programming, Why Python?, Applications of Python
Introduction to python programming, Why Python?, Applications of PythonIntroduction to python programming, Why Python?, Applications of Python
Introduction to python programming, Why Python?, Applications of PythonPro Guide
 

La actualidad más candente (20)

Python, the Language of Science and Engineering for Engineers
Python, the Language of Science and Engineering for EngineersPython, the Language of Science and Engineering for Engineers
Python, the Language of Science and Engineering for Engineers
 
Python final presentation kirti ppt1
Python final presentation kirti ppt1Python final presentation kirti ppt1
Python final presentation kirti ppt1
 
Get started python programming part 1
Get started python programming   part 1Get started python programming   part 1
Get started python programming part 1
 
Procedimiento - Instalación de Drivers
Procedimiento - Instalación de DriversProcedimiento - Instalación de Drivers
Procedimiento - Instalación de Drivers
 
Python Programming language
Python Programming languagePython Programming language
Python Programming language
 
Planificacion FCFS
Planificacion FCFSPlanificacion FCFS
Planificacion FCFS
 
Why I Love Python
Why I Love PythonWhy I Love Python
Why I Love Python
 
Codigo intermedio
Codigo intermedioCodigo intermedio
Codigo intermedio
 
Python presentation by Monu Sharma
Python presentation by Monu SharmaPython presentation by Monu Sharma
Python presentation by Monu Sharma
 
Ensamblaje y seleccion de componentes de una computadora
Ensamblaje y seleccion de componentes de una computadoraEnsamblaje y seleccion de componentes de una computadora
Ensamblaje y seleccion de componentes de una computadora
 
Introduction To Python | Edureka
Introduction To Python | EdurekaIntroduction To Python | Edureka
Introduction To Python | Edureka
 
Python ppt
Python pptPython ppt
Python ppt
 
Python Programming ppt
Python Programming pptPython Programming ppt
Python Programming ppt
 
Presentation on python
Presentation on pythonPresentation on python
Presentation on python
 
Best Python IDEs
Best Python IDEsBest Python IDEs
Best Python IDEs
 
Eclipse Modeling Framework
Eclipse Modeling FrameworkEclipse Modeling Framework
Eclipse Modeling Framework
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Clases/Tipos de lenguajes de programación
Clases/Tipos de lenguajes de programaciónClases/Tipos de lenguajes de programación
Clases/Tipos de lenguajes de programación
 
An introduction to Python for absolute beginners
An introduction to Python for absolute beginnersAn introduction to Python for absolute beginners
An introduction to Python for absolute beginners
 
Introduction to python programming, Why Python?, Applications of Python
Introduction to python programming, Why Python?, Applications of PythonIntroduction to python programming, Why Python?, Applications of Python
Introduction to python programming, Why Python?, Applications of Python
 

Destacado

Automatización de Procesos de Negocios con BPMS de Código Abierto
Automatización de Procesos de Negocios con BPMS de Código AbiertoAutomatización de Procesos de Negocios con BPMS de Código Abierto
Automatización de Procesos de Negocios con BPMS de Código AbiertoJosé Luis Chiquete Valdivieso
 
Intro Python
Intro PythonIntro Python
Intro Pythonctme
 
¿Porqué Python? ...y Django
¿Porqué Python? ...y Django¿Porqué Python? ...y Django
¿Porqué Python? ...y DjangoAntonio Ognio
 
Instlacion de windows
Instlacion de windowsInstlacion de windows
Instlacion de windowsTania Mayte
 
Instlacion komodo
Instlacion komodoInstlacion komodo
Instlacion komodoanglela97
 
Instlacion De Sistema Operativo
Instlacion De Sistema OperativoInstlacion De Sistema Operativo
Instlacion De Sistema Operativoluznocturna
 
Django on Jython Summer of Code Results
Django on Jython Summer of Code ResultsDjango on Jython Summer of Code Results
Django on Jython Summer of Code ResultsLeonardo Soto
 
Instlacion Komodo IDE
Instlacion Komodo IDEInstlacion Komodo IDE
Instlacion Komodo IDEanglela97
 

Destacado (20)

Tratamiento de datos
Tratamiento de datosTratamiento de datos
Tratamiento de datos
 
Programación Orientada a Objetos para Python
Programación Orientada a Objetos para PythonProgramación Orientada a Objetos para Python
Programación Orientada a Objetos para Python
 
Introducción a machine learning
Introducción a machine learningIntroducción a machine learning
Introducción a machine learning
 
Automatización de Procesos de Negocios con BPMS de Código Abierto
Automatización de Procesos de Negocios con BPMS de Código AbiertoAutomatización de Procesos de Negocios con BPMS de Código Abierto
Automatización de Procesos de Negocios con BPMS de Código Abierto
 
Intro Python
Intro PythonIntro Python
Intro Python
 
¿Porqué Python? ...y Django
¿Porqué Python? ...y Django¿Porqué Python? ...y Django
¿Porqué Python? ...y Django
 
Manual del administrador de Google Apps
Manual del administrador de Google AppsManual del administrador de Google Apps
Manual del administrador de Google Apps
 
Python (ejercicios)
Python (ejercicios)Python (ejercicios)
Python (ejercicios)
 
Ejercicios python
Ejercicios pythonEjercicios python
Ejercicios python
 
Python para principiantes
Python para principiantesPython para principiantes
Python para principiantes
 
Taller I Coreis Python 10112009
Taller I Coreis Python 10112009Taller I Coreis Python 10112009
Taller I Coreis Python 10112009
 
Cobol
CobolCobol
Cobol
 
Presentación1.maestria.unefa.
Presentación1.maestria.unefa.Presentación1.maestria.unefa.
Presentación1.maestria.unefa.
 
Instlacion de windows
Instlacion de windowsInstlacion de windows
Instlacion de windows
 
Instlacion komodo
Instlacion komodoInstlacion komodo
Instlacion komodo
 
Instlacion De Sistema Operativo
Instlacion De Sistema OperativoInstlacion De Sistema Operativo
Instlacion De Sistema Operativo
 
Django on Jython Summer of Code Results
Django on Jython Summer of Code ResultsDjango on Jython Summer of Code Results
Django on Jython Summer of Code Results
 
Instlacion Komodo IDE
Instlacion Komodo IDEInstlacion Komodo IDE
Instlacion Komodo IDE
 
Introduccion a Python
Introduccion a PythonIntroduccion a Python
Introduccion a Python
 
Python y Django
Python y DjangoPython y Django
Python y Django
 

Similar a Programador Jr. para Python Primera Parte

Similar a Programador Jr. para Python Primera Parte (20)

01 - Introducción al lenguaje de programación Python 3
01 - Introducción al lenguaje de programación Python 301 - Introducción al lenguaje de programación Python 3
01 - Introducción al lenguaje de programación Python 3
 
Introducción a python
Introducción a pythonIntroducción a python
Introducción a python
 
python
pythonpython
python
 
Parallel python sistemas operativos avanzados
Parallel python sistemas operativos avanzadosParallel python sistemas operativos avanzados
Parallel python sistemas operativos avanzados
 
Manual de python
Manual de pythonManual de python
Manual de python
 
Parallel Python sistemas operativos avanzados
Parallel Python sistemas operativos avanzadosParallel Python sistemas operativos avanzados
Parallel Python sistemas operativos avanzados
 
python-para-todos.pdf
python-para-todos.pdfpython-para-todos.pdf
python-para-todos.pdf
 
Python para todos
Python para todosPython para todos
Python para todos
 
Python para Todos
Python para TodosPython para Todos
Python para Todos
 
python-para-todos.pdf
python-para-todos.pdfpython-para-todos.pdf
python-para-todos.pdf
 
Python para todos
Python para todosPython para todos
Python para todos
 
Libro python para todos
Libro   python para todosLibro   python para todos
Libro python para todos
 
Python para todos
Python para todosPython para todos
Python para todos
 
Python_para_todos.pdf
Python_para_todos.pdfPython_para_todos.pdf
Python_para_todos.pdf
 
Python_para_todos.pdf
Python_para_todos.pdfPython_para_todos.pdf
Python_para_todos.pdf
 
Introducción a Python
Introducción a Python Introducción a Python
Introducción a Python
 
Introduccion a-python
Introduccion a-pythonIntroduccion a-python
Introduccion a-python
 
Sesión 1: Python
Sesión 1: PythonSesión 1: Python
Sesión 1: Python
 
Aprendamos python
Aprendamos pythonAprendamos python
Aprendamos python
 
Python-01.pdf
Python-01.pdfPython-01.pdf
Python-01.pdf
 

Último

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 

Último (13)

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 

Programador Jr. para Python Primera Parte

  • 1. Programador Jr. para Python. Primera parte. Diciembre 2013. José Luis Chiquete Valdivieso
  • 2. 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
  • 3. 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.
  • 4. Temario (ii) ● Más tipos de datos. ● Funciones. ● Módulos y paquetes. ● Caso de estudio. ● Escritura y lectura de archivos.
  • 6. ¿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". ●
  • 7. ¿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.).
  • 8. Índice TIOBE de popularidad de los lenguajes de programación (Octubre 2013). http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
  • 9. 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. ●
  • 10. 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.
  • 11. 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
  • 12. 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).
  • 14. Interfaz interactiva de Python ● Para salir de la interfaz interactiva se invoca a exit()
  • 15. 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. ●
  • 16. 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. ●
  • 17. Lenguajes de programación Lenguajes artificiales utilizados para ingresar valores y dar instrucciones a un sistema.
  • 18. 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.).
  • 19. 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.
  • 20. Python es... ● Un lenguaje de alto nivel. ● Un lenguaje interpretado. ● Que soporta múltiples paradigmas de programación.
  • 21. 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. ●
  • 22. 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. ●
  • 23. El Zen de Python
  • 24. 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.
  • 25. 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.
  • 26. 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!
  • 27. 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.
  • 28. 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
  • 29. IDE para Python ● IDLE. ● devpy para Eclipse. ● SPE. ● Boa Constructor. ● Vim. ● Emacs. ● Gedit. ● Wing IDE. ● Komodo. ● Ninja IDE.
  • 30. 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).
  • 32. 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.
  • 33. Configuración de Ninja-IDE ● En Windows es necesario indicarle a Ninja-IDE la localización del archivo ejecutable de Python.
  • 34. 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.
  • 35. Ventanas del shell interactivo
  • 38. Hola Mundo ● En la interfaz interactiva. ● Como script. ● Ejecutable. print "Hola Mundo"
  • 39. Hola Mundo en la Interfaz Interactiva
  • 40. 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.
  • 42. 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>
  • 45. Ejecutando holamundo.py desde Ninja-IDE ● Al oprimir Ctrl+F6 en Ninja-IDE el script se ejecuta de esta manera:
  • 46. 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.
  • 47. Script holamundo.py con raw_input()
  • 48. 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.
  • 50. PALABRAS RESERVADAS Y ESPACIO DE NOMBRES
  • 51. 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.
  • 54. 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.
  • 55. 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.
  • 56. El operador de asignación =
  • 57. La función dir() ● Cuando se ejecuta dir() sin ningún parámetro, éste despliega los nombres contenidos en el espacio de nombres principal.
  • 58. 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.
  • 60. 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.
  • 62. 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.
  • 65. Expresiones Una expresión es una combinación de valores, operadores y variables. ● 1+1 ● "azul" + " rojo" ● print "Hola"
  • 66. Declaraciones (Statements) ● Es una unidad de código que el intérprete de Python puede ejecutar.
  • 67. 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.
  • 68. Expresiones en entorno interactivo ● La interfaz interactiva evalúa las expresiones tan pronto como son ingresadas y en su caso, despliega el resultado.
  • 69. 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.
  • 71. TIPOS DE DATOS BÁSICOS Y OPERADORES
  • 72. 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) – ● Cadenas de texto (str) ● Encerradas entre comillas "" o apóstrofes '' – – ● 3 + 45j, 1j 'Hola Mundo' "Vamos al McDonald's" Valores booleanos(bool) ● True/False
  • 73. 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.
  • 74. 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
  • 75. Ejemplo del uso de tipos
  • 76. Ejemplo del uso de tipos
  • 77. Operadores aritméticos 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 // División entera % Módulo x = 1.0 / 2 # x es 0.5 * x = 1.0 // 2 #x es 0.0 x = 1.0 % 2 #x es 1 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.
  • 78. 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 /= 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 x %= y equivale a x = x % y
  • 79. 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
  • 80. Operadores de bit Operador Descripción Ejemplo a = 23 = 0b10111 b = 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
  • 81. Operadores de cadena Operador Descripción + Concatenación * Repetición Ejemplo a = ”Hola” b = ”Mundo” c=a+b # c es “HolaMundo” a = ”Hola” b=c*3 # c es “HolaHolaHola”
  • 82. Operadores de relación Operador == != > < >= <= a == b a != b a>b a<b a >= b a <= b Evalúa # ¿a igual a b? # ¿a distinta de b? #¿a mayor que b? #¿a menor que b? #¿a mayor o igual que b? #¿a menor o igual que b?
  • 83. Operadores Booleanos Operador or and not Evalúa a or b # ¿Se cumplen a o b? a and b # ¿Se cumple a y b? not a # ¿no es A?
  • 84. Operador de identidad ● El operador is evalúa si un identificador se refiere exactamente al mismo objeto. Operador is is not Evalúa a is b #equivale a id(a) == id(b) a is not b #equivale a id(a) != id(b)
  • 85. ENTRADA Y SALIDA ESTÁNDAR
  • 86. 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.
  • 88. print() en Python 3 ● Python 2.7 es una versión de transición, por lo que acepta ambas sintaxis.
  • 89. print y print() en Python 2.7 ● ● Python 2.7 es una versión "de transición", por lo que acepta ambas sintaxis. Para los alcances de este curso se usará la sintaxis de Python 2.
  • 90. 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. s d entero o octal x hexadecima f punto flotante e ● cadena de texto Punto flotante en formato exponencial 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.
  • 91. 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 %%.
  • 92. Despliegue con formato ● Para desplegar el signo de porcentaje "%" se utiliza %%.
  • 93. 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.
  • 94. Caracteres de escape Secuencia Acción n retorno t tabulador xXX carácter ASCII hexadecimal ' apóstrofe " comillas diagonal invertida
  • 95. 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. eval (<cadena de texto>) ● Cuando una cadena de texto no contenga una expresión válida, eval() generará un mensaje de error.
  • 97. 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.
  • 98. 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>)
  • 99. 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.
  • 101. 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.
  • 103. 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.
  • 104. 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.
  • 106. 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).
  • 107. 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.
  • 114. 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.
  • 116. 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.
  • 117. Terminación del bucle actual con continue ● Es posible terminar un subproceso de manera prematura con continue.
  • 118. Terminación del bucle actual con continue ● Es posible terminar un subproceso de manera prematura con continue.
  • 120. Ruptura del bucle con break ● Es posible terminar el bucle con break.
  • 122. Terminación de la ejecución con exit() ● El intérprete termina la ejecución del scritp a ser invocada la función exit()
  • 124. 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()
  • 125. 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
  • 127. 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.
  • 129. 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.
  • 130. 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).
  • 131. Excepciones ● Las excepciones son errores lógicos que detienen la ejecución del programa aún cuando la sintaxis del código sea correcta.
  • 132. 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.
  • 133. 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.
  • 134. 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.
  • 135. 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.
  • 136. 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.
  • 137. 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ó.
  • 138. 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
  • 139. Posibles tipos de excepciones en el script excepcion_probable.py ● NameError ● ValueError
  • 140. Posibles tipos de excepciones en el script excepcion_probable.py ● TypeError ● SyntaxError
  • 141. 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
  • 142. 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.
  • 143. Gestión de excepciones con except ● ● 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. ... ... try: <código suceptible de errores> except: <código> ... ...
  • 145. 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.
  • 146. 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.
  • 148. 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.
  • 149. 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> ... ...
  • 152. 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> ... ...
  • 153. 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.
  • 156. 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> ... ...
  • 157. 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.
  • 158. Uso de finally .. ... try: <código suceptible de errores> except: <código1> ... ... else: <código2> ... ... finally: <código3> ... ...
  • 159.
  • 162. 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>)
  • 165. 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>)
  • 168. 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.
  • 169. 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.
  • 170. 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.
  • 171. 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.
  • 172. 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.
  • 173. 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>)
  • 174. 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 *
  • 175. 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.
  • 176. La función dir() ● La función dir() ejecuta un listado de los métodos y atributos que contiene un objeto.
  • 177. 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.
  • 179. 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.
  • 180. MÁS TIPOS DE DATOS
  • 181. 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.
  • 182. Clasificación de tipos. ● Tipo booleanos (vistos previamente). ● Tipos numéricos (vistos previamente). ● Tipos secuenciales. ● Tipos de colección. ● Tipos mapeados. ● Tipos de archivo.
  • 183. 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á)
  • 184. Tipos de datos de conjuntos. ● Conjuntos set ● frozenset
  • 185. 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]]
  • 186. 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.
  • 187. 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>
  • 188. Eliminación de un elemento de la lista ● Para desligar un elemento de una lista se utiliza la declaración del. del <lista>[<índice>]
  • 189. 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.
  • 190. 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.
  • 192. 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.
  • 193. Algunos métodos de las listas
  • 194. 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).
  • 195. Efecto de espejo al asignar nombres a listas (Alias)
  • 196. "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.
  • 197. "Rebanado" de listas ● Es posible copiar hasta cierto nivel una lista mediante el "rebanado".
  • 198. 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".
  • 199. Rebanado de listas que contienen otros objetos
  • 201. Uso de for con listas
  • 202. Tuplas Definidas 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.
  • 203. Tuplas
  • 204. 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.
  • 205. 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.
  • 206. 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. <diccionario>[<identificador>] = <valor> ● Los identificadores no pueden modificarse.
  • 207. Adición de elementos a un diccionario ● Para añadir un elemento se hace lo siguiente: <diccionario>[<identificador nuevo>] = <valor>
  • 208. Eliminación de un elemento de un diccionario ● Para eliminar un elemento de un diccionario se utiliza la declaración del. del <diccionario>[<identificador>]
  • 209. 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.
  • 210. 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.
  • 211. Métodos de diccionarios en Python 3 En Python 3 los siguientes métodos fueron descartados. ● iteritems() ● iterkeys() ● itervalues()
  • 214. 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.
  • 216. 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.
  • 217. Algunos métodos de las cadenas
  • 219. 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>)
  • 220. 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>
  • 221. Algunos métodos para conjuntos
  • 222. 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>.
  • 223. Algunos métodos para conjuntos
  • 224. El ejemplo de animales domésticos
  • 225. 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.
  • 226. 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>
  • 227. Algunos ejemplos con frozenset
  • 228. 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.
  • 232. 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. def <nombre_función>(<argumentos>): <código> ● En Python, las funciones también son objetos.
  • 233. 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).
  • 235. 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.
  • 236. 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.
  • 238. Á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.
  • 239. Á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.
  • 240. Ámbito local y global
  • 241. 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().
  • 244. 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>
  • 246. 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.
  • 247. 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>
  • 250. 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>
  • 253. 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>
  • 256. 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.
  • 257. Métodos de importación (i) ● ● import <module> carga el módulo seleccionado. Para invocar un componente del módulo se ejecuta <modulo>.<componente>
  • 258. 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.
  • 259. 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.
  • 260. 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.
  • 261. Empalme en el espacio de nombres al importar
  • 262. Prevención de empalmes con la expresión as
  • 263. 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().
  • 264. 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.
  • 265. 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.
  • 267. 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.
  • 268. 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>)
  • 269. Ejemplo del uso de un módulo propio
  • 270. 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.
  • 272. El script modulo_cuenta_digitos.py Al ser ejecutado en la línea de comando: Al ser importado en el entorno interactivo:
  • 273. 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.
  • 274. Estructura de los paquetes ● En Windows, el paquete mail se localiza en C:Python27Libemail
  • 275. Estructura de los paquetes ● A su vez, el paquete mail.mime se localiza en C:Python27Libemailmime
  • 276. Invocación de módulos dentro de paquetes
  • 277. 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>)
  • 279. Ejemplo del uso de help()
  • 280. 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.
  • 282. Control escolar Una escuela desea realizar el control escolar de sus alumnos con los siguientes campos. Nombre de Pila str Primer Apellido str Segundo Apellido str Semestre int Promedio float Al Corriente bool
  • 283. Control escolar Por 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 Sistemas 5 8.0 True Arriaga
  • 284. Control escolar La escuela cuenta con 5 carreras: Sistemas Derecho Actuaría Arquitectura Administración
  • 285. 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.
  • 291. Trabajo a realizar ● El código contiene pocos comentarios. ● Analice y realice comentarios al código.
  • 292. 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-tF2kZLbAXPN0dZX1ZH TUJqUkE/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 sys sys.path.append("<ruta>") import caso
  • 294. 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>)
  • 295. 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.
  • 296. 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.
  • 299. 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>:
  • 300. 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
  • 305. Open Intelligence® http://openintelligence.mx info@openintelligence.mx +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/