Instituto Tecnológico de Culiacán
Introducción a la programación con
Python
MC. Emir Abel Manjarrez Montero.
[email protected]Agenda
1. Introducción
2. Elementos del lenguaje
3. Estructuras de Control
4. Funciones definidas por el usuario
5. Manejo de fechas
6. Manejo de Objetos
7. Paquetes y Módulos
8. Manejo de bases de datos
Introducción - ¿Qué es Python?
● Es un lenguaje de programación de alto nivel
○ interpretado,
○ multiplataforma (Windows, Linux, OSX, Etc.),
○ tipado dinámico
○ multiparadigma (Modular, orientado a objetos y funcional):
A diferencia de otros lenguajes de programación que no definen una postura
en los estándares de codificación, Python define una serie de reglas de
codificación
https://www.python.org/dev/peps/pep-0008/#code-lay-out
Filosofía
● Bello es mejor que feo.
(se usan operadores lógicos and, or, en lugar de &&, ||).
● Explícito es mejor que implícito.
(siempre se debe especificar el módulo al cual pertenece una
función)
● Simple es mejor que complejo.
● Complejo es mejor que complicado.
● Plano es mejor que anidado.
● Disperso es mejor que denso.
● La legibilidad cuenta.
● Los casos especiales no son tan especiales como para quebrantar las
reglas.
● Lo práctico gana a lo puro.
Filosofía(2/2)
● Los errores nunca deberían dejarse pasar silenciosamente, A menos que
hayan sido silenciados explícitamente.
● Frente a la ambigüedad, rechaza la tentación de adivinar.
● Debería haber una -y preferiblemente sólo una- manera obvia de
hacerlo.
● Ahora es mejor que nunca.
● Aunque nunca es a menudo mejor que ya mismo.
● Si la implementación es difícil de explicar, es una mala idea.
● Si la implementación es fácil de explicar, puede que sea una buena
idea.
Modalidades
Python cuenta con dos modalidades para ejecutar el código.
a) Modo interactivo o intérprete.
b) Modo Script.
Modo Interactivo
Esta modalidad resulta bastante útil para probar fragmentos pequeños de código, funciones, operadores o
expresiones.
El intérprete evalúa la sentencia y regresa el resultado.
b) Modo Script.
● Esta modalidad se basa en la idea de un conjunto de sentencias
almacenadas en un archivo con extensión .py (Script).
● El script completo es interpretado por la máquin virtual de Python.
● Ejercicio: HolaMundo.py
○ Elaborar un programa que pida el nombre de la persona a saludar y
escriba el siguiente mensaje “Hola NOMBRE, ¿Como estas?
Ejemplo hola_mundo.py en modo Script
Código fuente: hola_mundo.py
Funciones de entrada / salida
Salida:
print.- Se utiliza para emitir una salida, por default sobre la pantalla. La
sentencia recibe un arreglo de objeto a imprimir.
print ‘hola’,5, ’ ‘, ’Fin’
Es posible crear plantillas de cadenas método format de objeto string.
Sintaxis:
print ‘Hola {}, tu edad es de: {}’.format(‘Emir’, 34)
Function de entrada
● input / raw_input: Permiten leer datos desde el teclado.
sintaxis: input(cadena_mensaje)
Ejemplo:
nombre = raw_input(‘Ingresa el nombre:’)
edad = input(‘Ingresa la edad:’)
raw_input esta deprecada en la versión de Python 3.0.
Elementos del lenguaje
Variables
Un espacio en memoria para almacenar datos. La sintaxis en Python para definir una
variable es:
variable = valor
El valor que se le asigna a la variable define su tipo de dato, y las operaciones que se
pueden aplicar sobre dicha variable.
Convenciones de Python para nombrar variables:
1. Utilizar nombres descriptivos.
2. Usar letras minúsculas.
3. En caso de ser un nombre compuesto, separar por guión bajo.
Ejemplo: folio_fiscal = 10
4. Antes y después del signo = debe haber un solo caracter blanco.
Ejemplo de asignación de variables
Constantes
● Python NO define un mecanismo especial para definir constantes.
● Si se utiliza una variable como constante, el nombre debe estar en
mayúsculas, ejemplo:
TASA_IVA = 16.00
Tipo de datos primitivos
● Numéricos:
○ Enteros
○ Flotantes
○ Complejos
● Cadenas
● Booleanos
Tipo de dato numérico entero
Tipo de dato numérico real. Tipo de datos
booleano
Operadores aritméticos
Operador Operación
+ Suma
- Resta
* Multiplicación
** Exponenciación
/ División
// División Entera
% Residuo
- Negación.
¿Correcto?
Orden de precedencia
1. Los paréntesis se usan para agrupar expresiones . ()
2. Exponenciación **
3. Operadores unarios -, +
4. Multiplicar, dividir, módulo y división entera. *, /, //, %
5. Suma, Resta +, -
Ejercicio:
Elaborar un programa en Python que lea desde el teclado el subtotal de
la venta, % de descuento y tasa de IVA. Calcular el total, ejemplo:
subtotal: 100
% descuento: 50
Tasa de IVA: 16.00
==================
Total: 58.00
Descuento: 50.00
IVA: 8.00
Ejemplo:
Código fuente: operadores.py
Guideline sobre operadores aritméticos:
Siempre colocar un espacio en blanco, antes y después de un operador.
Comentarios
Los scripts Python pueden incluir comentarios (notas que como
programadores, indicamos en el código para poder comprenderlo
mejor).
Los comentarios pueden ser de dos tipos:
● De una sola línea
● Multilínea.
Comentario de una línea
Comentario multilínea
Guidelines sobre comentarios
● Los comentarios en línea deben separarse de la sentencia con dos espacios
en blanco. Luego del símbolo # debe ir un solo espacio.
# Correcto
a = 15 # edad de María
# Incorrecto
a = 15 # edad de María
Más sobre comentarios (Clean code)
● No comentes mal código, reescribelo.
● Los comentarios no pueden maquillar el mal
código. La necesidad de comentarios para aclarar
algo es síntoma de que hay código mal escrito que
debería ser rediseñado.
● Es preferible expresarse mediante el propio
código.
Situaciones donde los comentarios son
útiles:
● Aspectos legales del código.
● Advertir de consecuencias.
● Comentarios TODO.
● Remarcar la importancia de algo.
● Javadocs en APIs públicas.
Ejemplo:
Código Fuente: operadores_con_comentarios.py
Sustituir comentarios por funciones auto
descriptivas.
Código Fuente: operadores_con_funciones.py
Tipo de datos complejos:
Python posee 3 tipos de datos más, que permiten almacenar una
colección de datos. Estos tipos son:
● Tuplas
● Listas
● Diccionarios
Estos tres tipos, pueden almacenar colecciones de datos de diversos
tipos y se diferencian por su sintaxis y por la forma en la cual los datos
pueden ser manipulados.
Tuplas
● Una tupla es un objeto que permite almacenar varios datos
inmutables (no pueden ser modificados una vez creados) de tipos
diferentes.
● La colección de datos es heterogénea.
● Se pueden construir con la función tuple(colección)
Uso de tuplas
Más sobre tuplas
Listas
● Una lista es similar a una tupla, con la diferencia fundamental de que permite modificar
los datos una vez creados:
mi_lista = ['cadena de texto', 15, 2.8, 'otro dato', 25]
● A las listas se accede igual que a las tuplas, por su número de índice:
print mi_lista[1] # Salida: 15
print mi_lista[1:4] # Devuelve: [15, 2.8, 'otro dato']
print mi_lista[-2] # Salida: otro dato
● Las listas, NO son inmutables: permiten modificar los datos una vez creados:
mi_lista[2] = 3.8 # el tercer elemento ahora es 3.8
● Las listas, a diferencia de las tuplas, permiten agregar nuevos valores:
mi_lista.append('Nuevo Dato')
Métodos de las listas
Método Descripción
append(x) Agrega x al final de la lista.
insert(i, x) Inserta x en el índice de la lista.
remove(x) Elimina la primera ocurrencia de x en la lista
sort(key=comparer) Ordena los elementos de la lista.
reverse() Genera una lista invertida
pop(i) Elimina el elemento i de la lista y lo regresa como
resultado.
extend(i) Añade todos los elementos de L a la lista
count(x) Devuelve la cantidad de veces que X aparece en la
lista.
index(x) Devuelve el indice de X de la lista
Ejemplo de ordenamiento de listas sort
Diccionarios
● Mientras que a las listas y tuplas se accede solo y únicamente por un índice numérico, los
diccionarios permiten utilizar una clave para declarar y acceder a un valor:
mi_diccionario = {'clave_1': ‘valor_1’, 'c_2': ‘valor_2’, 'clave_7': ‘valor_7’}
print mi_diccionario['clave_2'] # Salida: valor_2
● Un diccionario permite eliminar cualquier entrada:
del(mi_diccionario['c_2'])
● Al igual que las listas, el diccionario permite modificar los valores
mi_diccionario['clave_1'] = 'Nuevo Valor'
Métodos del objeto diccionario
Método Descripción
has_key(k) Regresa True si el diccionario contiene la llave especificada en k.
items() Devuelve una lista con los elementos del diccionario. La lista esta compuesto por
tuplas de (llave, valor)
keys() Devuelve una lista con las llaves del diccionario.
values() Devuelve una lista con los valores del diccionario.
get(k) Regresa el valor del elemento que contiene la llave k.
get(k,x) Regresa el valor del elemento que contiene la llave k. en caso de no encontrar
regresa el valor X.
clear() Limpia el diccionario.
popitem() Remueve un elemento al azar.
update(dic2) Actualiza o inserta los elementos de dic2.
Estructuras de Control
Estructura de control condicionales
● Nos permiten evaluar condiciones y la acción que vamos a ejecutar si esta se cumple
o no.
● La evaluación de condiciones, sólo puede arrojar verdadero o falso (True o
False). Para describir la evaluación a realizar sobre una condición, se utilizan
Símbolo Descripción Ejemplo Resultado
operadores relacionales:
== Igual que 5 == 7 False
!= Diferente ‘rojo’ != ‘Rojo’ True
< Menor que 8 < 12 True
> Mayor que 12 > 7 True
<= Menor igual 12 <= 12 True
>= Mayor Igual 4 >= 5 False
Sentencia IF
[email protected]if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
Ejercicio: Algoritmo de Edad Canina.
Es una creencia generalmente aceptada, asumir que un año en la vida de un
perro corresponde a 7 años en la vida del ser humano. Otro método es el
siguiente:
● Un perro de 1 año de edad corresponde aproximadamente a un niño de 14
años edad.
● Un perro que es de 2 años de edad corresponde a una edad de 22 años
humana.
● Cada año adicional del perro corresponde a 5 años humanos.
Elabore un programa en Python que implementa dicho algoritmo.
Algoritmo de edad canina:
Código Fuente: dog.py
Falso o verdadero
Las siguientes expresiones se interpretan como Falso en Python:
● Números con valor cero (0, 0L, 0.0, 0x00).
● El literal False.
● Cadenas vacías.
● Listas, Diccionarios o tuplas vacías.
● El valor especial None.
Cualquier otro valor se considera como verdadero (True)º
Abreviaciones del IF
Programadores de C utilizan la siguiente notación para abreviar un bloque IF:
max = (a > b) ? a : b;
Esta abreviación representa el siguiente código de IF:
if (a > b)
max = a;
else
max = b;
La notación en Python equivalente sería:
max = a if (a > b) else b;
Abreviación del IF
Código Fuente: abreviacion_if.py
Ciclos
● Los ciclos permiten ejecutar un bloque de instrucciones “n” veces,
mientras una condición determinada se este cumpliendo.
● Python provee 2 tipos de ciclos:
○ while
○ for
Sintaxis Ciclo While
while <condicion>:
sentencia1
[else:
sentencia2
]
Ejemplo de ciclo While.
Ejercicio: Adivina el número
Escribe un programa Python para implementar el juego “Adivina el
número”
1. El programa solicita el nombre del jugador.
2. El programa obtiene un número aleatorio entre 0 y 100.
3. El programa le pregunta al jugador el número que adivino.
4. El jugador ingresa el número
5. Si el número indicado por el jugador es menor, el programa desplegará el siguiente mensaje:
a. “Sorry {nombre}, tu elección de {numero} fue muy BAJA.”
6. Si el número indicado por el jugador es mayor, el programa desplegará el mensaje :
a. “Sorry {nombre}, tu elección de {numero} fue muy Alta.”
7. El programa termina hasta que el jugador adivine el número
a. El programa desplegará el mensaje:
i. Excelente trabajo {nombre}, Tú ganas, era el {numero_aleatorio}!
Tip:
● El Paquete random tiene diversas funciones para obtener números aleatorios.
ejemplo:
print random.randint(0,100) # obtiene un entero aleatorio entre 0 y 100
Ejemplo para obtener números aleatorios
Adivina el número.
Código fuente: guess.py
Adivina el número con validación de
nombre.
Adivina con validación de nombre
Código Fuente: guess_con_validacion.py
Adivina el número con validación de nombre y
contabilidad de intentos.
Ciclo For
● Se utiliza para iterar sobre una estructura de datos compleja (lista o tupla),
● Sintaxis:
for nombre_iterador in objeto_coleccion:
sentencia
sentencia2
…
sentenciaN
● Es posible abandonar el cuerpo de un ciclo utilizando la sentencia
break,
● Es posible avanzar a la siguiente iteración con la sentencia
continue.
Ejemplo con listas:
Ejemplo con tuplas
Función range(n)
Genera una lista con los números desde 0 hasta n-1.
Ejemplo:
FUNCIONES DEFINIDAS POR EL
USUARIO
Funciones definidas por el usuario
● En Python las funciones se declaran mediante la palabra reservada def.
● La sintaxis básica es:
def nombre_funcion():
#sentencias
● Una función no es ejecutada hasta que es invocada, para invocar la solo hay que
poner el nombre de la función con la apertura y cierre de paréntesis, ejemplo:
nombre_function()
Funciones
● Para que una función regrese un valor a la expresión que la invoca se debe
utilizar la expresión return.
ejemplo:
def hola_mundo(nombre):
return “Hola {}, ¿Que tal?”.format(nombre)
print hola_mundo(“Emir”)
● Los argumentos de la función se indican como una lista de variables, separados
por comas.
● Es posible definir argumentos opcionales, asignándoles un valor por default.
def nombre_completo(nombre, apellido_paterno, separador = ‘ ‘):
return nombre + separador + apellido_paterno
nombre_completo(‘Emir Abel’, ‘Manjarrez’)
Arreglo de Parámetros
● En caso de querer definir una lista de parámetros indeterminada se
utiliza la siguiente notación:
def sumatoria(*numeros):
resultado = 0
for n in numeros:
resultado += n
return resultado
print sumatoria(1,5,6,5)
● La función len(numeros) devuelve el número de parámetros.
Manejo de Cadenas
paquete string
Constantes predefinidas en el paquete
string.
Constante Valor
ascii_letters, “abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”
letters
ascii_lowercase, “abcdefghijklmnopqrstuvwxyz”
lowercase
ascii_uppercase, “ABCDEFGHIJKLMNOPQRSTUVWXYZ”
uppercase
digits ‘0123456789’
hexdigits ‘0123456789abcdefABCDEF’
punctuation ‘!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~’
printable '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$
%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
whitespace '\t\n\x0b\x0c\r '
Strings
● Strings son un tipo de dato muy poderoso en Python.
● Para crearlas solo hay que encerrar una cadena entre comillas
dobles o simples.
cadena = “Hello World!”
cadena2 = “Pythong programming”
● Python no soporta el tipo de dato Char. Estos son tratados como
cadenas de longitud 1.
● Para acceder a un substring se utiliza []
Caracteres de escape
Operadores especiales de Strings
Formato %
Balanceo de paréntesis
Elaborar una programa Python que lea una cadena del teclado y determine si el
número de paréntesis ingresados esta balanceado.
Los paréntesis que se pueden usar son los siguientes:
● ( ), {}, []
Ejemplo:
(() -> No válido (5+5) → valido
((5+2*4)] → No válido
Código Bracklets
Manejo de fechas
Módulo datetime - manejo de fechas
El módulo datetime provee utilerias para manipular fechas.
Constantes predefinidas:
● datetime.MINYEAR → 1
● datetime.MAXYEAR → 9999
Objetos principales
● timedelta
● date
● datetime
● time
timedelta: Representa la diferencia entre dos fechas o duración de un
evento.
Sintaxis:
datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[,
weeks]]]]]]])
● Todos los argumentos son opcionales con valor default 0.
únicamente days, seconds y microseconds son almacenados internamente.
Los siguientes argumentos son convertidos a esas unidades:
● Un milisegundo es convertido a 1000 microsegundos.
● Un minuto es convertido a 60 segundos.
● Una hora es convertida a 3600 segundos.
● Una semana es convertida a 7 días.
Propiedades de timedelta (solo lectura)
● days.- Número de días, su valor está en el rango -999999999 y
999999999.
● seconds.- Número de Segundos, su valor está en el rango 0 y
86399
● microseconds.- Número de microsegundos su valor está en el
rango de 0 y 999999.
Métodos de timedelta
total_seconds()
Return the total number of seconds contained in the duration.
Operaciones con deltas
Operación Resultado
t1 = t2 + t3 Suma de t2 y t3.
t1 = t2 - t3 Diferencia de t2 y t3.
t1 = t2 * i or t1 Delta multiplicado por un entero.
= i * t2
-t1 Equivalente a timedelta(-t1.days, -t1.seconds, -t1.microseconds), y a
t1* -1.
abs(t)
str(t) Regresa una cadena en la forma de: [D day[s], ][H]H:MM:SS[.UUUUUU],
repr(t) Regresa una cadena en la forma datetime.timedelta(D[, S[, U]])
Ejemplo: Time Delta
Código fuente: timedelta.py
Objeto date
Un objeto fecha representa una fecha (anio, mes, dia) en un calendario
convencional (Gregoriano)
Sintaxis: datetime.date(year, month, day)
Todos los argumentos son requeridos, y deben respetar los siguientes rangos:
● year entre MINYEAR y MAXYEAR.
● month entre 1 y 12
● day entre 1 y el máximo número de días que tiene el mes en el año.
Métodos principales:
● today() .- Regresa la fecha actual.
● fromordinal(ordinal).- Regresa la fecha que le corresponde al número de día.
Objeto date
Atributos de Clase:
● date.min.- La mínima fecha representable → date(MINYEAR, 1, 1).
● date.max.- La máxima fecha representable → date(MAXYEAR, 12,
31).
Atributos de instancia (read-only):
● date.year.- Rango entre MINYEAR y MAXYEAR.
● date.month.- Rango entre 1 y 12.
● date.day.- Rango entre 1 y número de días del mes actual.
Operaciones permitidas
Operación Resultado
date2 = date1 + timedelta date2 = date1 + tiempo especificado en timedelta
date2 = date1 - timedelta date2 = date1 - tiempo especificado en time delta
timedelta = date1 - date2 timedelta = diferencia de tiempo entre date1 y date2
date1 < date2 True si date1 es menor a date2
Métodos objeto date
● date.replace(year, month, day).- Regresa una fecha con los mismos valores, excepto para los parámetros
proporcionados como argumento.
● date.weekday().- Regresa el día de la semana como un integer, Donde Lunes es 0 y Domingo es 6.
● date.isoweekday().-Regresa el día de la semana como un integer, Donde Lunes es 1 y Domingo es 7.
● date.isoformat().- Regresa un string que representa la fecha en formato ISO 8601 ( ‘YYYY-MM-DD’).
● date.__str__().- Equivalente a d.isoformat().
● date.strftime(format).- Regresa una cadena de fecha con el formato indicado. Se emplean códigos para dar formato a
horas, minutos o segundos. La lista completa de formato esta en esta página strftime() and strptime() Behavior.
Directivas para formatear fechas
Directiva Significado Ejemplo
%a Día de la semana abreviado Sun, Mon, ..., Sat (en_US); So, Mo
%A Día de la semana completo Sunday, Monday, ..., Saturday
(en_US);
%w # Día de la semana, 0 = Dom y 6 = sábado. 0, 1, ..., 6
%d Día del mes relleno con cero. 01, 02, ..., 31
%b Nombre del mes abreviado Jan, Feb, ..., Dec (en_US);
%B Nombre de mes completo. January, February, ..., December
(en_US);
%m Número de mes relleno con cero. 01, 02, ..., 12
%y Número de año 2 dígitos. 00, 01, ..., 99
%Y Número de año 1970, 1988, 2001, 2013
%H Hora formato 24 horas 00, 01, ..., 23
%I Hora formato 12 horas 01, 02, ..., 12
%p AM o PM AM, PM (en_US);
%M Minuto relleno de ceros 00, 01, ..., 59
%S Segundo relleno de ceros 00, 01, ..., 59
%j Día del año 001, 002, ..., 366
00, 01, ..., 53
Ejercicio: Birthday App
● Elaborar un programa Python que solicite al usuario lo siguiente:
○ Año de nacimiento (yyyy): x---x
○ Mes de nacimiento (mm): x---x
○ Dia de nacimiento (dd): x---x
● Calcular la fecha de cumpleaños en el año actual.
● Calcular el número de días que faltan para tu cumpleaños (o transcurrieron).
● Desplegar:
○ Si ya paso tu cumpleaños → “Tuviste tu cumpleaños hace {} días”
○ Si aún no ha pasado desplegar: → “Tu cumple es en {} días!”
○ Si es el día actual → “Felicidades hoy es tu cumpleaños”.
Birthday
App
Paquete Calendar
Funciones Matemáticas
Paquete math
Funciones Matemáticas
Código fuente: mathexample.py
Código fuente:
Funciones de trigonometría
Más sobre cadenas
Métodos del objeto string
● captitalize().- Pone el primer carácter en mayúsculas, y el resto en
minúsculas. Ejemplo:
print “HOY ES LUNES”.capitalize()
● center(w).- Rellena con espacios a la izquierda y a derecha para
centrar el texto. ejemplo:
print “Hoy es Lunes”.center(40)
● count(str,begin=0, lon=len(str)).- cuenta el número de veces que
un substring aparece dentro de una cadena. Ejemplo
print “# -*- coding: utf-8 -*-”.count(“-*-”) # 2
● find(str,beg=0,len=len(str)).- Regresa la posición donde aparece
el substring.
ejemplo:
print “# -*- coding: utf-8 -*-”.find(“-*-”) # 2
● isalpha().- regresa verdadero si todos los caracteres son letras.
ejemplo:
print “Emir2”.isalpha(), “emir”.isalpha()
● isdigit().- Regresa verdadero si todos los caracteres son dígitos (0-9)
print “5.5”.isdigit(), “0012932343”.isdigit()
● len(str).- Regresa la longitud de la cadena.
print len(“5.5”), len(“0012932343”)
● lower(str).- Convierte una cadena a minúsculas. Ejemplo:
print “HOY ES LUNES”.lower()
● upper(str).- Convierte una cadena a mayúsculas. Ejemplo:
print “Hoy es lunes”.upper()
● replace(old, new).- Reemplaza una subcadena por otra. Ejemplo:
print “HOY ES LUNES”.replace(“LUNES”, “Miercoles”)
● split(str).- Genera una lista a partir de una cadena Ejemplo:
print “HOY ES LUNES”.split(‘ ‘) # [‘HOY’,’ES’,’LUNES’]
● zfill(width).- Rellena una cadena con ceros a la izquierda, hasta
completar la longitud de width. Ejemplo:
print “1234”.zfill(5)
MÓDULOS Y PAQUETES
Módulos y Paquetes
=
Un archivo de python, es un archivo con extensión “.py” que a su vez es un
módulo.
Módulos y Paquetes
__init__
Un paquete, es una carpeta que puede contener uno o más módulos, pero para ser
considerado como paquete, debe contener un archivo de inicio llamado
“__init__.py” aún cuando este archivo se encuentre vacío.
Módulos y Paquetes
paquete
Los paquetes a su vez
pueden contener __init__
subpaquetes
modulo1
__init__ subpaquete
modulo2
modulo1
Módulos y Paquetes
Los módulos no
├── modulo1.py
necesariamente └── paquete
├── __init__.py
deben estar dentro ├── modulo1.py
└── subpaquete
de un paquete ├──
__init__.py
├──
modulo1.py
└──
modulo2.py
Módulos y Paquetes ├── modulo1.py
└── paquete
├── __init__.py
├── modulo1.py
Para usar el contenido de cada módulo desde otros módulos es necesario └── subpaquete
importar los módulos, para hacer dicha tarea, es necesario utilizar la ├──
__init__.py
palabra import seguida del nombre del paquete (de ser necesario) y el ├──
nombre del módulo sin su extensión. modulo1.py
Por ejemplo: └──
modulo2.py
import modulo1;
#importa un módulo que no está en paquete
import paquete.modulo1;
#importa un módulo que está en un paquete
import paquete.subpaquete.modulo1;
Módulos y Paquetes “Los namespaces”
Para acceder desde el módulo actual hacia cualquier elemento del módulo
importado se utiliza un “namespace” (una ruta definida por la forma en que el
módulo fue importado), seguido de un punto y el nombre del elemento que se
desea obtener. Por ejemplo:
print modulo1.CONSTANTE_1;
print paquete.modulo1.CONSTANTE_1;
print paquete.subpaquete.modulo1.CONSTANTE_1;
Módulos y Paquetes “Los alias”
Es una forma de acceder de una manera más corta a los módulos que
importamos, por ello, al momento de la importación, utilizamos la palabra “as”
para definir el alias.
Al importar
Al import
obtener el valor
modulo1 as m; print m.CONSTANTE_1;
import paquete.modulo1 as pm; print pm.CONSTANTE_1;
import paquete.subpaquete.modulo1 as print psm.CONSTANTE_1;
psm;
Módulos y Paquetes ¿Utilizar valores sin
namespaces?
Si esa duda no te dejaba respirar tranquilamente, respira, es posible utilizar los
valores sin namespaces, solo debes cambiar la forma en que se importa el
módulo y podrás hacerlo sin contratiempos.
Para poder hacer uso de esta bondad del lenguaje solo necesitamos hacer uso de
la instrucción “from” seguida de nuestro “namespace” más el nombre del módulo
que deseamos importar
from paquete.modulo1 import CONSTANTE_1
En este caso, se accederá
directamente al elemento,
print CONSTANTE_1 sin recurrir a su namespace:
Módulos y Paquetes ¿Utilizar valores sin
namespaces?
También es posible importar más de un elemento en la misma instrucción, para
que seas capaz de lograr esto, solo es necesario que separes cada atributo por
una coma y un espacio en blanco:
from paquete.modulo1 import CONSTANTE_1, CONSTANTE_2
Módulos y Paquetes ¿Utilizar valores sin
namespaces?
Y… ¿Qué pasa si los elementos que necesito importar están en módulos
diferentes pero tienen los mismos nombres?
Para evitar equivocarnos utilizamos alias en esos elementos.
from paquete.modulo1 import CONSTANTE_1 as C1, CONSTANTE_2 as C2
from paquete.subpaquete.modulo1 import CONSTANTE_1 as CS1, CONSTANTE_2 as CS2
print C1
print C2
print CS1
print CS2
Módulos y Paquetes ¿Utilizar valores sin
namespaces?
Y… ¿Qué pasa si no quiero utilizar namespace pero tampoco alias?
Se puede hacer, pero es poco recomendable debido a que puedes confundirte.
En este caso, todos los elementos importados se accederán por su nombre
original.
from paquete.modulo1 import *
print CONSTANTE_1
print CONSTANTE_2
Manejo de Objetos
Introducción a la orientación a objetos
● En Python todo es un objeto.
● Un objeto es una instancia de una clase.
● Las clases definen:
○ Propiedades del objeto.
○ Métodos (comportamiento).
Ejemplo:
Código Fuente: dogClass.py
Acceso a propiedades públicas
¿Y la
encapsulación?
Propiedades privadas
● Python no cuenta con constructores (public, private o protected)
para definir la visibilidad de las propiedades.
● Para indicar que una propiedad o método es privado el nombre
debe empezar con dos guiones bajos(__).
● Las propiedades de la clase que inicien con dos guiones son
privadas, lo que significa que no pueden accederse desde fuera de
la misma.
¿Cual es el resultado de ejecutar este
programa?
Código Fuente: dogClassPrivateError.py
Clase Dog con métodos getter & setters
Código Fuente: dogClassSetterGetter.py
Clase Dog con propiedades
Código Fuente: dogClassProperty.py
Comparando propiedad vs setter & getters
Guidelines
● El nombre de las clases debe ir en formato camel case, ejemplo:
○ Una clase figura se debe nombrar como: Figura.
○ Una clase Cuentacontable se nombra: CuentaContable.
● Las propiedades se nombran con las mismas reglas de las variables.
Constructores
● Al crear una instancia de un objeto es posible definir el estado
inicial del objeto a través del constructor de la clase.
● En Python un constructor es un método especial llamado __init__,
el cual se invoca durante la instanciación del objeto, ejemplo:
def __init__(self, name):
self.name = name
Ejemplo constructor:
Código Fuente: dogClassConstructor.py
Implementando el constructor
Ejercicio:
● Elaborar un programa Python que lea “N”
números, los almacene en una colección y
despliegue la siguiente información
--------------------------------->
● Utilice un objeto para contener la lista y realizar
las operaciones de mayor, sumatoria y
promedio.
Operaciones con “N”
números.
Código Fuente: numbersClass.py
Archivos
Archivo
Los archivos permiten almacenar información en disco. Para manipular archivos
se utiliza el objeto File.
Modalidad de apertura de archivos
● open(archivo, modo).- abre el archivo especificado, en el modo indicado.
Indicador Modo de apertura Ubicación del puntero
r Solo lectura Al inicio del archivo
r+ Lectura y escritura Al inicio del archivo
w Solo escritura. Sobreescribe el archivo si existe. Crea el archivo Al inicio del archivo
si no existe
w+ Escritura y lectura. Sobreescribe el archivo si existe. Crea el Al inicio del archivo
archivo si no existe
a Añadido (agregar contenido). Crea el archivo si éste no existe Si el archivo existe, al final de éste. Si el archivo no
existe, al comienzo
a+ Añadido (agregar contenido) y lectura. Crea el archivo si éste Si el archivo existe, al final de éste. Si el archivo no
no existe. existe, al comienzo
Funciones para manejo de archivos
● read().- lee todo el contenido de archivo.
● read(b).- Lee hasta el byte especificado.
● readline(). Lee una línea del archivo.
● readlines(). Lee TODAS las lineas del archivo.
● tell(). Retorna la posición actual del cursor.
Ejemplo abrir un archivo de texto
Código Fuente: archivo01.py
Ejemplo para leer archivo
Código Fuente: archivo02.py
os.path
Descripción Método
Provee del submódulo path (os.path)
el cual nos permite acceder a ciertas Saber si un directorio os.path.exists(path)
funcionalidades relacionadas con los existe
nombres de las rutas de archivos y
directorios. Entre ellas, las más destacadas Conocer último acceso a os.path.getatime(path)
un directorio
se describen en la siguiente tabla:
Conocer tamaño del os.path.getsize(path)
directorio
Saber si una ruta es un os.path.isfile(path)
archivo
Saber si una ruta es un os.path.isdir(path)
directorio
Limpiar la pantalla de interprete
from subprocess import call
call('clear')
Pydoc - Generar
documentación
Ejemplo:
pydoc -w
utileria.py
pydoc paquete
pydoc libreria
Sitio de documentación
pydoc -p 8080
Propiedades del objeto file
Se pueden acceder a las siguientes propiedades del objeto file:
● closed: retorna True si el archivo se ha cerrado. De lo contrario,
False.
● mode: retorna el modo de apertura.
● name: retorna el nombre del archivo
● encoding: retorna la codificación de caracteres de un archivo de
texto
Bases de datos - paquete MySQLdb