Python 3¶

Última edición el día 2020-12-14 a las 20:52.
Esta es la documentación que he recopilado para trabajar con Python 3, el lenguaje de propósito general que me gusta utilizar en mis proyectos y en mi trabajo del día a dia.
Índice
Elementos básicos del lenguaje¶
Comentarios¶
Los comentarios se pueden realizar de dos tipos:
Comentarios de una sola línea:
# Comentario de una sola linea
Comentarios multilínea:
'''
Esto es un comentario multilínea
Aquí podemos establecer mas de
una linea
'''
Estructura en Python¶
La estructura de Python se presenta de un modo ligeramente distinto al de otros lenguajes de programación:
# Las variables se declaran sin usar palabra reservada como var:
variable = "contenido" # python no utiliza ; para finalizar línea.
# En las estructuras de control, funciones y clases de python sustituye las llaves por ``:``, y la identación del contenido es obligatoria:
for n in numeros:
print(numeros[n])
Preparación del script¶
Cuando creamos un nuevo script python tenemos que tener en cuenta un par de líneas, la primera es el interprete que es python y la segunda la codificación que utilizamos en España utf8.
Ejemplo:
#!/usr/bin/env python3
#_*_ coding: utf8 _*_
Repositorio de paquetes¶
Python además de contar con una biblioteca estandar también tiene un repositorio conocido como PyPI al cual podemos acceder en: pypi.org.
Palabras reservadas de Python 3¶
En Python existen las siguientes palabras reservadas:
and
as
assert
async
await
break
class
continue
def
del
elif
else
except
False
finally
for
from
global
if
import
in
is
lambda
None
nonlocal
not
or
pass
raise
return
True
try
while
with
yield
Variables y tipos de datos¶
Variables¶
Las variables se definene de forma dinámica, lo que significa que no se especifica su tipo de antemano y puede cambiar su valor en todo momento.
Ejemplo:
nombre = "Antonio"
Constantes¶
Las constantes no existen como tales en Python, pero si se utiliza la convención de declararlas en mayúsculas para recordar que es un dato que no debería ser mutable.
Ejemplo:
DNI = "23435324Z"
Tipos de datos primitivos¶
Los tipos de datos mas comunes son los siguientes:
Tipo de dato |
Denominación |
Ejemplo |
---|---|---|
str |
Cadena de texto |
“cadena”, «cadena» |
int |
Número Entero |
20, 5, -3, 0 |
float |
Número con decimales |
20.53, 12.5, -18.353 |
bool |
Verdadero o falso |
True, False |
list |
Matriz de datos |
[1, 5, «Hola», True] |
tuple |
Matriz de datos inmutable |
(«hola», 15, False) |
dict |
Objeto con orden de tipo clave:valor |
{“nombre”:”Pedro”, edad: 45} |
Ejemplos:
cadena = "Dia de paga"
otraCadena = 'Cadena de comillas simples es lo mismo'
entero = 27
decimal = 22.83
booleano = True
lista = [1, 5, 13, "Papiro"]
tupla = (3, "guay", True)
diccionario = {'profesion': 'programador', 'hobbie':'DIY'}
Entrada y Salida de datos¶
En Python 3 la entrada y salida de datos se presenta de la siguiente forma:
Entrada de datos:
nombre = input('Escribe tu nombre: ')
Salida de datos:
# Cadena formateada:
print("Te llamas {}".format(nombre))
# Cadena concatenada:
print("Te llamas " + nombre)
Como vemos en el ejemplo anterior tenemos dos formas de imprimir, concatenando con + cada una de las cadenas y variables
o bien utilizar el formato que funciona introduciendo dentro de la cadena unas llaves {}
y luego justo despúes de la cadena
la unimos con la función .format()
en la cual iremos añadiendo cada una de las variables presentes:
print("Te llamas {}, tienes {} años y vives en {}.".format(nombre,edad,ciudad))
Operadores¶
Operadores Aritméticos¶
Los operadores aritméticos que se presentan en python son los mismos que en la mayoría de lenguajes,
+, -, *, /, %
Estos podemos utilizarlos del siguiente modo:
# asignación:
suma = 2 + 2
# salida de datos:
print(3 - 2)
# si utilizamos + en cadenas las concatenamos:
cadenas = "cadena uno" + " y " + " cadena dos"
Operadores Relacionales¶
Los operadores relacionales en python son los mismos que en la mayoría de lenguajes de programación:
Operador |
símbolo |
---|---|
Mayor que |
> |
Menor que |
< |
Igual que |
== |
Mayor igual que |
>= |
Menor igual que |
<= |
Cuando hablamos del uso de un solo =
nos referimos a la asignación de un valor en una variable.
Como en muchos lenguajes, si imprimimos por consola la relación entre un valor y otro el resultado será True o False:
# Si decimos que 3 es mayor que 2
print(3 > 2)
# el resultado que sale por consola es True.
Operadores Lógicos¶
En Python se utilizan los mismos operadores lógicos que en la mayoría de lenguajes de programación, sin embargo presentan un aspecto diferente:
Operador |
símbolo |
condición |
---|---|---|
Y (and) |
and |
La condición se cumple si todos son verdaderos |
O (or) |
or |
La condición se cumple si al menos uno es verdadero |
NO (not) |
! |
La condición se cumple si es diferente a lo que se compara |
Ejemplos:
# Resultado False:
print(5 > 7 and 3 < 6)
# Resultado True:
print(5 > 7 or 3 < 6)
# Resultado True
print(6 != 3)
Estructuras de control¶
En python disponemos de estructuras de control como if
, for
y while
.
Condicional if¶
Las condiciones sencillas en python funcionan del siguiente modo:
saludo = input("Di hola: ")
if saludo == 'Hola':
print('Hola a tí también')
También tenemos condiciones con una salida alternativa si no se cumple esta:
nacimiento = input('Dime tu nacimiento: ')
if nacimiento <= 2002:
print('Eres mayor de edad')
else:
print('Eres menor de edad')
Condicional if-elif¶
Las condiciones compuestas nos ofrecen varios caminos posibles:
edad = input('Dime tu edad: '):
if edad >= 18:
print('Eres mayor de edad')
elif edad < 18:
print('Eres menor de edad')
elif edad >= 65:
print('Ya eres un anciano')
else:
print('No es una edad correcta')
Bucle for¶
El bucle for en python se presenta de un modo muy similar al foreach de otros lenguajes:
Uso con rango definido:
mensaje = input("Escribe tu mensaje: ")
numero = int(input("¿cuántas veces lo repito? "))
for n in range(0, numero):
print("{} : {}".format(n,mensaje))
Bucle while¶
El bucle While es similar a otros lenguajes, pero no se presenta la figura del bucle do-while.
Ejemplo:
numero = 10
juego = True
while juego == True:
adivina = int(input('Adivinia el número >> '))
print('Fallaste!')
if adivina == numero:
print('Acertaste!')
juego = False
Ejemplo con bucle infinito:
numero = 10
# al añadir True hacemos un bucle infinito:
while True:
adivina = int(input('Adivinia el número >> '))
if adivina == numero:
print('Acertaste!')
// Con exit() finalizamos el programa
exit()
print('Fallaste!')
Estructuras de datos¶
Listas¶
Las listas son un tipo de dato mutable que agrupa un conjuto de valores de distintos tipos:
lista = [1, 15, -12, 3.81, "cadena", True]
Recorrer valores de una lista e imprimirlos con
for
:
lista = ["uno", "dos", "tres", "cuatro"]
for l in lista:
print(l)
Ver cuantos elementos hay en una lista con
len()
:
print(len(lista))
Imprime un elemento de la lista por su posición:
print(lista[2])
Muestra un rango de elementos de la lista:
print(lista[0:2])
Muestra el último elemento de la lista:
print(lista[len(lista)-1])
Borra el último elemento de la lista con
pop()
:
lista.pop()
print(lista)
Borrar un elemento por su posición con
del
:
del lista[2]
print(lista)
Añadir un elemento a la lista con
append()
:
lista.append("nuevo texto")
print lista
Convertir lista a cadena de texto con
join()
:
lista = ['P','e','p','e']
lista = ''.join(lista)
print(lista)
Crear una lista a partir de un rango o una tupla con
list()
:
numeros = range(0,30)
lista = list(numeros)
print(lista)
Ordenar elementos de listas por orden numérico o alfabético:
lista = ["gato", "nocilla", "avión", "leche"]
# Orden normal:
print(sorted(lista))
# Orden inverso:
print(sorted(lista, reverse=True))
Verificar si se encuentra un elemento en la lista:
lista = ["gato", "nocilla", "avión", "leche"]
'gato' in lista // esto devuelve true o false dependiendo de si la cadena existe o no en la lista.
'perro' not in lista // igual que antes pero preguntando si no existe
Tuplas¶
Las tuplas son similiares a las listas pero con la diferencia de que estas son inmutables.
Ejemplo de lista:
tupla = (1, 'palabra', True, 3.53)
Recorrer valores de una tupla e imprimirlos:
tupla = (1, 'palabra', True, 3.53)
for t in tupla:
print(t)
Ver cuantos elementos hay en una tupla con
len()
:
print(len(tupla))
Imprime un elemento de la tupla por su posición:
print(tupla[2])
Muestra un rango de elementos de la tupla:
print(tupla[0:2])
Muestra el último elemento de la tupla:
print(tupla[len(tupla)-1])
Convertir tupla a cadena de texto con
join()
:
tupla = ('P','e','p','e')
tupla = ''.join(tupla)
print(tupla)
Crear una tupla a partir de un rango o lista con
tuple()
:
lista = [10, "hola", 3.43]
tupla = tuple(lista)
print(tupla)
Ordenar elementos de tuplas por orden numérico o alfabético:
tupla = (9, 2, 3, 5, 1)
# Orden normal:
print(sorted(tupla))
# Orden inverso:
print(sorted(tupla, reverse=True))
Diccionarios¶
Los diccionarios en python se asemejan a los objetos literales en javascript u otros lenguajes de programación.
Se construye por pares de datos que son clave y valor {'nombre':'Antonio'}
y pueden anidar todo tipo de datos e incluso más diccionarios.
Ejemplo de uso:
diccionario = {'nombre':'Pepe', 'edad': 37, 'profesion':'agricultor'}
print(diccionario)
Imprimir un valor del diccionario:
print(diccionario['nombre'])
Convertir diccionario a tupla con
items()
:
tupla = diccionario.items()
print(tupla)
Copiar un diccionario con
copy()
:
otro = diccionario.copy()
print(otro)
Recuperar solo las claves del diccionario con
keys()
:
claves = diccionario.keys()
print(claves)
Recuperar solo los valores del diccionario con
values()
:
valores = diccionario.values()
print(valores)
Recorrer e imprimir todos los elementos del diccionario:
for d in diccionario:
print(d + " Su valor es: " + diccionario[d])
Funciones Internas¶
Como en la mayoría de lenguajes de programación, en Python existen funciones predefinidas.
Funciones de cadenas¶
Aquí tenemos las funciones mas utilizadas para tratamiento de cadenas de texto:
Para saber la longitud de una cadena con
len()
:
nombre = "Alba María"
print(len(nombre))
Convertir valor numérico a cadena con
str()
:
numero = 27
numero = str(numero)
print(numero)
Convertir una cadena en una lista
split()
:
lista = nombre.split()
print(lista)
Reemplazar una cadena por otra con
replace()
:
frase = "Soy la persona mas afortunada"
print(frase.replace('Soy', 'Era'))
Convertir a mayúsculas la cadena con
upper()
:
frase = "Hace buen día"
print(frase.upper())
Convertir a minúsculas la cadena con
lower()
:
frase = "MI nombre Es Alfredo"
frase = frase.lower()
print(frase)
Funciones numéricas¶
Estas son las funciones numéricas mas comunes en python:
Convertir un valor a entero con
int()
:
numero = int(input("introduce un número: "))
print(numero)
Convertir un valor a decimal con
float()
:
numero = float(input("introduce un número: "))
print(numero)
Redondear un valor decimal con
round()
:
numero = 13.583
print(round(numero))
Crear un rango de números con
range()
:
rango = range(1,11)
print(list(rango))
Mostrar el valor mayor de un rango con
max()
:
print(max(rango))
Mostrar el valor mínimo de un rango con
min()
:
print(min(rango))
Sumar todos los valores de un rango con
sum()
:
print(sum(rango))
Otras funciones comunes¶
Tenemos una serie de funciones de uso común en python:
Averiguar que tipo de dato contiene una variable con
type()
:
variable = "cadena"
print(type(variable))
Funciones¶
Las funciones en Python se declaran con def
en lugar de function
como en muchos otros lenguajes:
# Creación:
def saludar():
print('Hola mundo')
# Llamada:
saludar()
Recibir parametros en una función:
# Añadimos un nombre:
nombre = input('¿Cómo te llamas?: )
# Creamos la función que recibirá un valor que imprimimos:
saludar(persona):
print("Hola {}".format(persona))
# y llamamos a la función pasándole la variable nombre:
saludar(nombre)
Recibir parametros infinitos añadiendo
*
a un parametro:def miFuncion(*unNombre): for persona in unNombre: print("Se llama {}".format(persona)) miFuncion("Pepe", "Antonio", "Alfredo")
Clases¶
Las clases en python tienen una estructura similar al de otros lenguajes,
la mayor diferencia reside en el encapsulamiento lo que normalmente utilizamos this
pasa a ser self
y tenemos que
pasarlo a los métodos que vayan a utilizar atributos de la clase (osea practicamente siempre):
class Persona():
# atributos de clase
nombre = ""
genero = ""
peso = 0
estatura = 0
# Constructor
def __init__(self):
self.nombre = "Alfredo"
self.genero = "Masculino"
self.peso = 82
self.estatura = 174
# Métodos:
def datos(self):
print("Su nombre es {}, su género {}, pesa {} kilos y mide {}.".format(self.nombre, self.genero, self.peso, self.estatura))
# creacion del objeto:
antonio = Persona()
# Ejecutando metodo del objeto:
antonio.datos()
Implementación de clases que reciben parámetros:
class Persona():
nombre = ""
genero = ""
peso = 0
estatura = 0
# Pasamos los parámetros por el constructor y los asignamos a los atributos:
def __init__(self, para_nombre, para_genero, para_peso, para_estatura):
self.nombre = para_nombre
self.genero = para_genero
self.peso = para_peso
self.estatura = para_estatura
def datos(self):
print("Su nombre es {}, su género {}, pesa {} kilos y mide {}.".format(self.nombre, self.genero, self.peso, self.estatura))
# Al crear el objeto le enviamos los parámetros correspondientes:
antonio = Persona('Antonio', 'Masculino' ,79, 168)
antonio.datos()
Para heredar una clase en python lo hacemos como en la mayoría de lenguajes:
class Luis(Persona):
def __init__(self):
self.nombre = "Luis"
self.genero = "Masculino"
self.peso = 79
self.estatura = 158
luis = Luis()
# y podemos acceder a los metodos del padre como a sus atributos:
luis.datos()
Acceso a atributos y metodos de otras clases:
class Animal:
tipo = "perro"
edad = 5
def __init__(self):
print("animal creado")
def saberEdad(self):
return self.edad
class Mascota:
def __init__(self):
# creamos el objeto y usamos self para poder manejarlo en toda la clase:
self.animal = Animal()
# y con un punto podemos recuperar atributos y metodos:
print("Mi mascota es un {}".format(self.animal.tipo, self.animal.saberEdad()))
def cumple(self, nuevaEdad):
self.animal.edad = nuevaEdad
print("Mi {} cumple {} años".format(self.animal.tipo, self.animal.saberEdad()))
mascota = Mascota()
mascota.cumple(6)
En este ejemplo se podía haber usado la herencia, pero lo he realizado de este modo para mostrar como se puede recuperar atributos y metodos de otro objeto cuando la herencia no encaja tanto.
Manejo de errores¶
El manejo de errores en Python se hace con try
y except
seguido opcionalmente por finally
:
try:
print(nombre)
except NameError:
print('No has escrito un nombre')
finally KeyboardInterrupt:
print('Fin de la ejecución')
Generar errores personalizados con
raise
:
try:
raise IOError
except IOError:
print('Ocurrió un error')
exit()
Módulos Internos¶
Los módulos son archivos que proveen de ciertas funciones y clases para realizar determinadas tareas. En python los mas utilizados son:
Con
os
podemos navegar por el sistema de archivos:
import os
os.mkdir('prueba')
Podemos administrar archivos de forma mas detallada con
shutil
:
import shutil
shutil.copyfile('archivo.txt', 'nuevo.txt')
shutil.move('/carpeta/origen', '/carpeta/destino')
Si necesitamos trabajar con números aleatorios
random
es nuestro módulo:
import random
# Elegir un elemento al azar:
lista = ['galletas', 'tortitas', 'sandwich']
random.choice(lista)
# Dame un número al azar que puede ser decimal:
random.random()
# Y un número al azar basado en un rango de enteros:
random.randrange(15)
Y para trabajar con fechas y tiempo
datetime
:import datetime
# fecha de hoy: fecha = datetime.date.today() # guardar una fecha: felizVeinte = datetime.date(2020, 1, 1)
print(fecha) print(felizVeinte)
Módulos y paquetes¶
Podemos crear nuestros propios módulos en python para cortar partes del código específicas:
Lo primero es crear un nuevo archivo.py y guardar ahí por ejemplo una clase.
Luego creamos un segundo archivo que será el principal.py y para importarlo basta con escribir
import archivo
al comienzo del proyecto.
Si lo que queremos es guardar el módulo en una carpeta entonces estamos hablando de un Paquete:
Los paquetes son archivos.py que guardamos en una carpeta.
Dentro de esa carpeta creamos siempre un archivo llamado
__init__.py
para que el interprete lo considere un paquete.Luego en el archivo principal.py lo importamos con la línea
from carpeta import archivo
Y para poner un alias a un paquete o módulo de python ya sea estandar o personalizado utilizamos as
:
from carpeta import archivo as traductor
Manejor de archivos¶
En python podemos crear y modificar archivos con la función open()
:
Cuando abrimos un archivo en python siempre asignamos un permiso:
Permiso |
Nomenclatura |
---|---|
Escritura |
w |
Lectura |
r |
Actualización |
a |
En el caso de escritura:
# abrimos el archivo con escritura por ejemplo:
archivo = open('archivo.txt', 'w')
# Escribimos varias líneas:
archivo.write('Hola')
archivo.write('\n')
archivo.write('Lo de antes es un salto de línea')
# Y lo cerramos
archivo.close()
En caso de lectura:
archivo = open('archivo.txt', 'r')
# Y lo guardamos en una lista eliminando los saltos:
lista = archivo.read().split('\n')
for l in lista:
print(l)
archivo.close()
En caso de actualización:
archivo = open('archivo.txt', 'a')
archivo.write('\n')
archivo.write('linea adicional')
archivo.close()