Manual Python
Manual Python
Introducción 3 1
1.1 Hablando con la máquina . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.2 Algo de historia . . . . . . .
..........................7
1.3 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
i
6.4 Módulos.......................................................................................................................... 318 7
Procesamiento de texto...................................................................................................330
7.1 re..................................................................................................................................... 330
7.2 string ............................................................................................................................... 335 8
Ciencia de datos..............................................................................................................339
8.1 jupyter............................................................................................................................. 339
8.2 numpy............................................................................................................................. 364
8.3 pandas............................................................................................................................. 407
8.4 matplotlib ....................................................................................................................... 476 9
Scraping ..........................................................................................................................519
9.1 requests.......................................................................................................................... 519
9.2 beautifulsoup.................................................................................................................. 528
9.3 selenium.......................................................................................................................... 543
ii
Aprende Python
Curso gratuito para aprender el lenguaje de programación Python con un enfoque práctico,
incluyendo ejercicios y cobertura para distintos niveles de conocimiento.1
Este proyecto va de la mano con pycheck una herramienta que permite trabajar todos los
ejercicios propuestos con casos de prueba incluidos y verificación de los resultados.
Licencia: Creative Commons Reconocimiento 4.0 Internacional: CC BY 4.0.
Consejo: «Programming is not about typing, it’s about thinking.» – Rich Hickey 2 Core
CAPÍTULO 1
1
En la foto de portada aparecen los Monty Python. Fuente: noticiascyl
Core
1
Aprende Python
Introducción
Este capítulo es una introducción a la programación para conocer, desde un enfoque sencillo
pero aclaratorio, los mecanismos que hay detrás de ello.
Aprende Python
Los ordenadores son dispositivos complejos pero están diseñados para hacer una cosa bien:
ejecutar aquello que se les indica. La cuestión es cómo indicar a un ordenador lo que queremos
que ejecute. Esas indicaciones se llaman técnicamente instrucciones y se expresan en un
lenguaje. Podríamos decir que programar consiste en escribir instrucciones para que sean
ejecutadas por un ordenador. El lenguaje que utilizamos para ello se denomina lenguaje de
programación.1
1.1.2 Ensamblador
El primer lenguaje de programación que encontramos en esta «escalada» es ensamblador.
Veamos un ejemplo de código en ensamblador del típico programa que se escribe por primera
vez, el «Hello, World»:
SYS_SALIDA equ 1
Capítulo 1. Introducción
Aprende Python
4
(proviene de la página anterior)
mov ebx, 1 ;descripción de archivo (stdout) mov ecx,
msg ;msg a escribir mov edx, len ;longitud del
mensaje int 0x80 ;llama al sistema de interrupciones
Aunque resulte difícil de creer, lo «único» que hace este programa es mostrar en la pantalla de
nuestro ordenador la frase «Hello, World», pero además teniendo en cuenta que sólo
funcionará para una arquitectura x86.
1.1.3 C
Aunque el lenguaje ensamblador nos facilita un poco la tarea de desarrollar programas, sigue
siendo bastante complicado ya que las instrucciones son muy específicas y no proporcionan una
semántica entendible. Uno de los lenguajes que vino a suplir – en parte – estos obstáculos fue C.
Considerado para muchas personas como un referente en cuanto a los lenguajes de
programación, permite hacer uso de instrucciones más claras y potentes. El mismo ejemplo
anterior del programa «Hello, World» se escribiría así en lenguaje C:
#include <stdio.h>
1.1.4 Python
Si seguimos «subiendo» en esta lista de lenguajes de programación, podemos llegar hasta
Python. Se dice que es un lenguaje de más alto nivel en el sentido de que sus instrucciones son
más entendibles por un humano. Veamos cómo se escribiría el programa «Hello, World» en el
lenguaje de programación Python:
print(Hello, World)
¡Pues así de fácil! Hemos pasado de código máquina (ceros y unos) a código Python en el que se
puede entender perfectamente lo que estamos indicando al ordenador. La pregunta que surge
es: ¿cómo entiende una máquina lo que tiene que hacer si le pasamos un programa hecho en
Python (o cualquier otro lenguaje de alto nivel)? La respuesta es un compilador.
4 Capítulo 1. Introducción
Aprende Python
1.1. Hablando con la máquina
1.1.5 Compiladores
Los compiladores son programas que convierten un lenguaje «cualquiera» en código máquina.
Se pueden ver como traductores, permitiendo a la máquina interpretar lo que queremos hacer.
Figura 1: Esquema de funcionamiento de un compilador2
1
2 PUSH_NULL
4 LOAD_NAME 0 (print)
6 LOAD_CONST 0 (Hello, World)
8 PRECALL 1
2
Iconos originales por Flaticon.
3
Véase más información sobre el intérprete de bytecode.
5
Aprende Python
RETURN_VALUE
12 CALL
1
22
Luego los avances en las ciencias informáticas han sido muy acelerados, se reemplazaron los
tubos de vacío por transistores en 1958 y en el mismo año, se sustituyeron por circuitos
integrados, y en 1961 se miniaturizaron en chips de silicio. En 1971 apareció el primer
microprocesadordeIntel;yen1973elprimersistemaoperativoCP/M.Elprimercomputador personal
es comercializado por IBM en el año 1980.
2
Fuente: Meatze.
7
Aprende Python
Figura 2: Ada Lovelace: primera programadora de la historia2
4
Fuente: Universidad Técnica del Norte.
5
Fuente: Wikipedia.
9
Aprende Python
Bertrand Meyer Inventor de Eiffel
Bill Joy Inventor de vi. Autor de BSD Unix. Creador de SunOS, el cual
se convirtió en Solaris
10 Capítulo 1. Introducción
Aprende Python
1.2. Algo de historia
6
Foto original por Markéta Marcellová en Unsplash.
1.3. Python
12 Capítulo 1. Introducción
Aprende Python
• Extensible (C++, C, …) y «embebible».
• Gran comunidad, amplio soporte.
• Interpretado.
• Tipado dinámico7.
• Fuertemente tipado8.
Desventajas
14 Capítulo 1. Introducción
Aprende Python
1.3. Python 15
Aprende Python
9
Fuente: python.org.
16 Capítulo 1. Introducción
Aprende Python
Versión Fecha de lanzamiento
1.3.4 CPython
Nivel avanzado
Existen múltiples implementaciones de Python según el lenguaje de programación que se ha
usado para desarrollarlo. Veamos algunas de ellas:
Implementación Lenguaje
CPython C
Jython Java
IronPython C#
Brython JavaScript
RustPython Rust
MicroPython C
4
Término que se refiere a los/las desarrolladores/as principales del lenguaje de programación.
Nota: Cuando hacemos referencia a Python hablamos (implícitamente) de CPython. Este manual
versa exclusivamente sobre CPython.
1.3. Python 17
Aprende Python
1.3.5 Zen de Python
Existen una serie de reglas «filosóficas» que indican una manera de hacer y de pensar dentro del
mundo pitónico2 creadas por Tim Peters, llamadas el Zen de Python y que se pueden aplicar
incluso más allá de la programación:
>>> import this
The Zen of Python, by Tim Peters
En su traducción de la Wikipedia:
• 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.
• Espaciado es mejor que denso.
2
Dícese de algo/alguien que sigue las convenciones de Python.
• La legibilidad es importante.
18 Capítulo 1. Introducción
Aprende Python
• Los casos especiales no son lo suficientemente especiales como para romper las reglas.
• Sin embargo la practicidad le gana a la pureza.
• Los errores nunca deberían pasar silenciosamente.
• A menos que se silencien explícitamente.
• Frente a la ambigüedad, evitar la tentación de adivinar.
• Debería haber una, y preferiblemente solo una, manera obvia de hacerlo. • A
pesar de que esa manera no sea obvia a menos que seas Holandés. • Ahora es
mejor que nunca.
• A pesar de que nunca es muchas veces 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, puede que sea una buena idea. • Los espacios
de nombres son una gran idea, ¡tengamos más de esos! Ver también:
Si quieres darle un toque a tu escritorio, puedes descargar este fondo de pantalla del Zen de
Python que queda muy chulo.
1.3. Python 19
Aprende Python
12. Fallar es barato en programación. Aprende mediante la práctica.
13. Gran parte de la programación es investigación.
14. La programación en pareja te enseñará mucho más que escribir código tu solo.
15. Da un paseo cuando estés bloqueado con un error.
16. Convierte en un hábito el hecho de pedir ayuda. Pierdes cero credibilidad pidiendo ayuda.
17. El tiempo gastado en entender el problema está bien invertido.
18. Cuando estés bloqueado con un problema: sé curioso, no te frustres. 19. Piensa en
posibles escenarios y situaciones extremas antes de resolver el problema. 20. No te
estreses con la sintaxis de lenguaje de programación. Entiende conceptos. 21. Aprende
a ser un buen corrector de errores. Esto se amortiza.
22. Conoce pronto los atajos de teclado de tu editor favorito.
23. Tu código será tan claro como lo tengas en tu cabeza.
24. Gastarás el doble de tiempo en corregir errores que en escribir código.
25. Saber buscar bien en Google es una habilidad valiosa.
26. Lee código de otras personas para inspirarte.
27. Únete a comunidades de desarrollo para aprender con otros/as programadores/as.
20 Capítulo 1. Introducción
CAPÍTULO 2
Entornos de desarrollo
Para poder utilizar Python debemos preparar nuestra máquina con las herramientas necesarias.
Este capítulo trata sobre la instalación y configuración de los elementos adecuados para el
desarrollo con el lenguaje de programación Python.
2.1 Thonny
Thonny es un programa muy interesante para empezar a aprender Python, ya que engloba tres
de las herramientas fundamentales para trabajar con el lenguaje: intérprete, editor y
depurador.1
Cuando vamos a trabajar con Python debemos tener instalado, como mínimo, un intérprete del
lenguaje (para otros lenguajes sería un compilador). El intérprete nos permitirá ejecutar nuestro
código para obtener los resultados deseados. La idea del intéprete es lanzar instrucciones
«sueltas» para probar determinados aspectos.
21
Aprende Python
Pero normalmente queremos ir un poco más allá y poder escribir programas algo más largos,
por lo que también necesitaremos un editor. Un editor es un programa que nos permite crear
ficheros de código (en nuestro caso con extensión *.py), que luego son ejecutados por el
intérprete.
Hay otra herramienta interesante dentro del entorno de desarrollo que sería el depurador. Lo
podemos encontrar habitualmente en la bibliografía por su nombre inglés debugger. Es el
módulo que nos permite ejecutar paso a paso nuestro código y visualizar qué está ocurriendo en
cada momento. Se suele usar normalmente para encontrar fallos (bugs) en nuestros programas
y poder solucionarlos (debug/fix).
Cuando nos encontramos con un programa que proporciona estas funciones (e incluso otras
adicionales)paraeltrabajodeprogramación,nosreferimosaélcomoun Entorno Integrado de
Desarrollo, conocido popularmente por sus siglas en inglés IDE (por Integrated Development 1
Foto original de portada por freddie marriage en Unsplash.
2.1.1 Instalación
Para instalar Thonny debemos acceder a su web y descargar la aplicación para nuestro sistema
operativo. La ventaja es que está disponible tanto para Windows, Mac y Linux. Una vez
descargado el fichero lo ejecutamos y seguimos su instalación paso por paso.
Una vez terminada la instalación ya podemos lanzar la aplicación que se verá parecida a la
siguiente imagen:
Nota: Es posible que el aspecto del programa varíe ligeramente según el sistema operativo,
configuración de escritorio, versión utilizada o idioma (en mi caso está en inglés), pero a efectos
de funcionamiento no hay diferencia.
El intérprete de Python (por lo general) se identifica claramente porque posee un prompt2 con
tres angulos hacia la derecha >>>. En Thonny lo podemos encontrar en el panel inferior, pero se
debe tener en cuenta que el intérprete de Python es una herramienta autocontenida y que la
podemos ejecutar desde el símbolo del sistema o la terminal:
Para hacer una prueba inicial del intérprete vamos a retomar el primer programa que se suele
hacer. Es el llamado «Hello, World». Para ello escribimos lo siguiente en el intérprete y pulsamos
la tecla ENTER:
>>> print(Hello, World)
Hello, World
23
Aprende Python
Lo que hemos hecho es indicarle a Python que ejecute como entrada la instrucción print( Hello,
World ). La salida es el texto Hello, World que lo vemos en la siguiente línea (ya sin el prompt
>>>).
Importante: Los ficheros que contienen programas hechos en Python siempre deben tener la
extensión .py
2
Término inglés que se refiere al símbolo que precede la línea de comandos.
3
La carpeta donde se guarden los archivos de código no es crítico para su ejecución, pero sí es importante
mantener un orden y una organización para tener localizados nuestros ficheros y proyectos.
Aunque ya lo veremos en profundidad, lo que hemos hecho es añadir una variable msg en la
línea 1 para luego utilizarla al mostrar por pantalla su contenido. Si ahora volvemos a ejecutar
nuestro programa veremos que en el panel de variables nos aparece la siguiente información:
Name Value
2.1. Thonny
sesión de depuración y podemos avanzar instrucción por instrucción usando la tecla F7:
Figura 3:
Depurando nuestro primer programa en Python
25
Aprende Python
2.2.1 Python
La forma más habitual de instalar Python (junto con sus librerías) es descargarlo e instalarlo
desde su página oficial:
• Versiones de Python para Windows
• Versiones de Python para Mac
• Versiones de Python para Linux
Anaconda
Otra de las alternativas para disponer de Python en nuestro sistema y que además es muy
utilizada, es Anaconda. Se trata de un conjunto de herramientas, orientadas en principio a la
La instalación limpia2 de Python ya ofrece de por sí muchos paquetes y módulos que vienen por
defecto. Es lo que se llama la librería estándar. Pero una de las características más destacables
de Python es su inmenso «ecosistema» de paquetes disponibles en el Python Package Index
(PyPI).
Para gestionar los paquetes que tenemos en nuestro sistema se utiliza la herramienta pip, una
utilidad que también se incluye en la instalación de Python. Con ella podremos instalar,
1
Foto original de portada por SpaceX en Unsplash.
2
También llamada «vanilla installation» ya que es la que viene por defecto y no se hace ningúna
personalización.
Consejo: Para el caso de Anaconda usaríamos conda install pandas (aunque ya viene
preinstalado).
/Users/sdelquin/.virtualenvs/env1/bin/get_ ,→env_details
• $ pip install requests: instala el paquete requests dentro del entorno virtual env1 • $
workon env1: activa el entorno virtual env1
pyenv permite cambiar fácilmente entre múltiples versiones de Python en un mismo sistema. Su
instalación engloba varios pasos y está bien explicada en la página del proyecto. La mayor
diferencia con respecto a virtualenv es que no instala las distintas versiones de Python a nivel
global del sistema. En vez de eso, se suele crear una carpeta .pyenv en el HOME del usuario,
donde todo está aislado sin generar intrusión en el sistema operativo.
Podemos hacer cosas como:
• Listar las versiones de Python instaladas:
$ pyenv versions
3.7.4 * 3.5.0 (set by /Users/yuu/.pyenv/version) miniconda3-3.16.0
pypy 2.6.0
2.2.4 Editores
Existen multitud de editores en el mercado que nos pueden servir perfectamente para escribir
código Python. Algunos de ellos incorporan funcionalidades extra y otros simplemente nos
permiten editar ficheros. Cabe destacar aquí el concepto de Entorno de Desarrollo Integrado,
más conocido por sus siglas en inglés IDE 10 . Se trata de una aplicación informática que
proporciona servicios integrales para el desarrollo de software.
Podríamos decir que Thonny es un IDE de aprendizaje, pero existen muchos otros. Veamos un
listado de editores de código que se suelen utilizar para desarrollo en Python:
• Editores generales o IDEs con soporte para Python:
– Eclipse + PyDev
– Sublime Text
– Atom
– GNU Emacs
– Vi-Vim
– Visual Studio (+ Python Tools) – Visual Studio Code (+ Python
Tools)
• Editores o IDEs específicos para Python:
10
Integrated Development Environment.
Truco: Visual Studio Code también dispone de integración con Jupyter Notebooks.
2.2.6 repl.it
repl.it es un servicio web que ofrece un entorno de desarrollo integrado para programar en
más de 50 lenguajes (Python incluido).
Es gratuito y de uso colaborativo. Se requiere una cuenta en el sistema para utilizarlo. El hecho
de no requerir instalación ni configuración previa lo hace atractivo en determinadas
circunstancias.
En su versión gratuita ofrece:
4
Término inglés utilizado para hacer referencia a algoritmos de aprendizaje automático. 5 Proceso específico
para un lenguaje de programación que ejecuta instrucciones y actúa como interfaz de entrada/salida.
• Almacenamiento de 500MB.
• Python 3.8.2 (febrero de 2022).
• 117 paquetes preinstalados (febrero de 2022).
• Navegador (y subida) de ficheros integrado.
• Gestor de paquetes integrado.
• Integración con GitHub.
• Gestión de secretos (datos sensibles).
• Base de datos clave-valor ya integrada.
• Acceso (limitado) al sistema operativo y sistema de ficheros.
2.2.7 WSL
Si estamos trabajando en un sistema Windows 10 es posible que nos encontremos más
cómodos usando una terminal tipo «Linux», entre otras cosas para poder usar con facilidad las
herramientas vistas en esta sección y preparar el entorno de desarrollo Python. Durante mucho
tiempo esto fue difícil de conseguir hasta que Microsoft sacó WSL.
WSL6 nos proporciona una consola con entorno Linux que podemos utilizar en nuestro Windows
10 sin necesidad de instalar una máquina virtual o crear una partición para un 6 Windows
Subsystem for Linux.
4. Finalmente, la instalamos:
$ Add-AppxPackage .\Ubuntu.appx
En este punto, WSL debería estar instalado correctamente, y debería también aparecer en el
menú Inicio.
11
Tutorial de instalación de WSL.
2.3 VSCode
Visual Studio Code (VSCode) es un entorno de desarrollo integrado12 gratuito y de código abierto
que ha ganado mucha relevancia en los últimos años. Permite trabajar fácilmente con multitud
de lenguajes de programación y dispone de una gran cantidad de plugins.13
Ajustes generales
Acción Atajo
12
También conocido por IDE siglas en inglés de Integrated Development Environment.
13
Foto original de portada por Kelly Sikkema en Unsplash.
14
Fuente: Gastón Danielsen en Dev.To.
2.3. VSCode
35
Aprende Python
continué en la próxima página
Tabla 1 – proviene de la página anterior
Acción Atajo
Usabilidad
Acción Atajo
Cerrar Ctrl + F4
Edición básica
Acción Atajo
Reemplazar Ctrl + H
Punto de ruptura
A continuación pondremos un punto de ruptura (también llamado breakpoint). Esto implica que
la ejecución se pare en ese punto y viene indicado por un punto rojo . Para ponerlo nos
tenemos que acercar a la columna que hay a la izquierda del número de línea y hacer clic.
En este ejemplo ponemos un punto de ruptura en la línea 10:
Figura 5: Apertura del fichero a depurar
2.3. VSCode 37
Aprende Python
Lanzar la depuración
Ahora ya podemos lanzar la depuración pulsando la tecla F5. Nos aparecerá el siguiente mensaje
en el que dejaremos la opción por defecto Archivo de Python y pulsamos la tecla :
2.3. VSCode 39
Aprende Python
5. Barra de herramientas para depuración.
Seguimiento de variables
2.3. VSCode 41
Aprende Python
Figura 12: Panel para seguimiento de expresiones
CAPÍTULO 3
Tipos de datos
Igual que en el mundo real cada objeto pertenece a una categoría, en programación manejamos
objetos que tienen asociado un tipo determinado. En este capítulo se verán los tipos de datos
básicos con los que podemos trabajar en Python.
3.1 Datos
Los programas están formados por código y datos. Pero a nivel interno de la memoria del
ordenador no son más que una secuencia de bits. La interpretación de estos bits depende del
lenguaje de programación, que almacena en la memoria no sólo el puro dato sino distintos
metadatos.15
15
Foto original de portada por Alexander Sinn en Unsplash.
43
Aprende Python
Cada «trozo» de memoria contiene realmente un objeto, de ahí que se diga que en Python todo
son objetos. Y cada objeto tiene, al menos, los siguientes campos:
• Un tipo del dato almacenado.
• Un identificador único para distinguirlo de otros objetos.
• Un valor consistente con su tipo.
3.1.2 Variables
Las variables son fundamentales ya que permiten definir nombres para los valores que tenemos
en memoria y que vamos a usar en nuestro programa.
16
Para ser exactos, sí se pueden utilizar otros caracteres, e incluso emojis en los nombres de variables, aunque no
suele ser una práctica extendida, ya que podría dificultar la legibilidad.
45
Aprende Python
Podemos obtener un listado de las palabras reservadas del lenguaje de la siguiente forma:
>>> help(keywords)
Here is a list of the Python keywords. Enter any keyword to get more help.
Nota: Por lo general se prefiere dar nombres en inglés a las variables que utilicemos, ya que así
hacemos nuestro código más «internacional» y con la posibilidad de que otras personas puedan
leerlo, entenderlo y – llegado el caso – modificarlo. Es sólo una recomendación, nada impide
que se haga en castellano.
Importante: Los nombres de variables son «case-sensitive»3. Por ejemplo, stuff y Stuff son
nombres diferentes.
3
Sensible a cambios en mayúsculas y minúsculas.
46 Capítulo 3. Tipos de datos
Aprende Python
3.1. Datos
Convenciones para nombres
Mientras se sigan las reglas que hemos visto para nombrar variables no hay problema en la
forma en la que se escriban, pero sí existe una convención para la nomenclatura de las
variables. Se utiliza el llamado snake_case en el que utilizamos caracteres en minúsculas
(incluyendo dígitos si procede) junto con guiones bajos – cuando sean necesarios para su
legibilidad –.17 Por ejemplo, para nombrar una variable que almacene el número de canciones
en nuestro ordenador, podríamos usar num_songs.
Esta convención, y muchas otras, están definidas en un documento denominado PEP 8. Se trata
de una guía de estilo para escribir código en Python. Los PEPs18 son las propuestas que se hacen
para la mejora del lenguaje.
Aunque hay múltiples herramientas disponibles para la comprobación del estilo de código,
unabastanteaccesibleeshttp://pep8online.com/yaquenonecesitainstalación,simplemente pegar
nuestro código y verificar.
Constantes
Un caso especial y que vale la pena destacar son las constantes. Podríamos decir que es un tipo
de variable pero que su valor no cambia a lo largo de nuestro programa. Por ejemplo la
velocidad de la luz. Sabemos que su valor es constante de 300.000 km/s. En el caso de las
constantes utilizamos mayúsculas (incluyendo guiones bajos si es necesario) para nombrarlas.
Para la velocidad de la luz nuestra constante se podría llamar: LIGHT_SPEED.
Se suele decir que una persona programadora (con cierta experiencia), a lo que dedica más
tiempo, es a buscar un buen nombre para sus variables. Quizás pueda resultar algo excesivo
pero da una idea de lo importante que es esta tarea. Es fundamental que los nombres de
variables sean autoexplicativos, pero siempre llegando a un compromiso entre ser concisos y
claros.
Supongamos que queremos buscar un nombre de variable para almacenar el número de
elementos que se deben manejar en un pedido:
1. n
2. num_elements
17
Más información sobre convenciones de nombres en PEP 8.
18
Del término inglés «Python Enhancement Proposals».
47
Aprende Python
3. number_of_elements
4. number_of_elements_to_be_handled
No existe una regla mágica que nos diga cuál es el nombre perfecto, pero podemos aplicar el
sentido común y, a través de la experiencia, ir detectando aquellos nombres que sean más
adecuados. En el ejemplo anterior, quizás podríamos descartar de principio la opción 1 y la 4
(por ser demasiado cortas o demasiado largas); nos quedaríamos con las otras dos. Si nos
fijamos bien, casi no hay mucha información adicional de la opción 3 con respecto a la 2. Así
que podríamos concluir que la opción 2 es válida para nuestras necesidades. En cualquier caso
esto dependerá siempre del contexto del problema que estemos tratando.
Como regla general:
• Usar nombres para variables (ejemplo article).
• Usar verbos para funciones (ejemplo get_article()).
• Usar adjetivos para booleanos (ejemplo available).
3.1.3 Asignación
En Python se usa el símbolo = para asignar un valor a una variable:
Nota: Hay que diferenciar la asignación en Python con la igualación en matemáticas. El símbolo
= lo hemos aprendido desde siempre como una equivalencia entre dos expresiones algebraicas,
sin embargo en Python nos indica una sentencia de asignación, del valor (en la derecha) al
nombre (en la izquierda).
3.1. Datos
>>> SOUND_SPEED = 343.2
>>> WATER_DENSITY = 997
>>> EARTH_NAME = La Tierra
Python nos ofrece la posibilidad de hacer una asignación múltiple de la siguiente manera:
>>> tres = three = drei = 3
En este caso las tres variables utilizadas en el «lado izquierdo» tomarán el valor 3.
Recordemosquelosnombresdevariablesdebenseguirunas reglas establecidas,delocontrario
obtendremos un error sintáctico del intérprete de Python:
>>> 7floor = 40 # el nombre empieza por un dígito
File "<stdin>", line 1
7floor = 40
^
SyntaxError: invalid syntax
Las asignaciones que hemos hecho hasta ahora han sido de un valor literal a una variable. Pero
nada impide que podamos hacer asignaciones de una variable a otra variable:
>>> people = 157503
Eso sí, la variable que utilicemos como valor de asignación debe existir previamente, ya que si
no es así, obtendremos un error informando de que no está definida:
>>> total_population = lot_of_people
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name lot_of_people is not defined
49
Aprende Python
De hecho, en el lado derecho de la asignación pueden aparecer expresiones más complejas que
se verán en su momento.
Hemos visto previamente cómo asignar un valor a una variable, pero aún no sabemos cómo
«comprobar» el valor que tiene dicha variable. Para ello podemos utilizar dos estrategias:
1. Si estamos en una «shell» de Python, basta con que usemos el nombre de la variable:
>>> final_stock = 38934
>>> final_stock
38934
Nota: print sirve también cuando estamos en una sesión interactiva de Python («shell»)
Para poder descubrir el tipo de un literal o una variable, Python nos ofrece la función type().
Veamos algunos ejemplos de su uso:
>>> type(9) int
3.1.4 Mutabilidad
Nivel avanzado
Las variables son nombres, no lugares. Detrás de esta frase se esconde la reflexión de que
cuando asignamos un valor a una variable, lo que realmente está ocurriendo es que se hace
apuntar el nombre de la variable a una zona de memoria en el que se representa el objeto (con
su valor):
>>> a = 5
3.1. Datos 51
Aprende Python
La función id() nos permite conocer la dirección de memoria19 de un objeto en Python. A través
de ella podemos comprobar que los dos objetos que hemos creado «apuntan» a la misma zona
de memoria:
>>> id(a)
4445989712
>>> id(b)
4445989712
>>> id(20)
4333546704
19
Esto es un detalle de implementación de CPython.
Cuando la zona de memoria que ocupa el objeto se puede modificar hablamos de tipos de datos
mutables. En otro caso hablamos de tipos de datos inmutables.
Por ejemplo, las listas son un tipo de dato mutable ya que podemos modificar su contenido
(aunque la asignación de un nuevo valor sigue generando un nuevo espacio de memoria).
Ejecución paso a paso a través de Python Tutor:
https://cutt.ly/lvCyXeL
Tipos de objetos en Python según su naturaleza de cambio:
Inmutable Mutable
bool list
int set
float dict
str
tuple
Importante: El hecho de que un tipo de datos sea inmutable significa que no podemos
modificarsuvalor«in-situ»,perosiemprepodremosasignarleunnuevovalor(hacerloapuntar a otra
zona de memoria).
3.1. Datos 53
Aprende Python
ascii() divmod() id() object() sorted()
id(obj, /)
Return the identity of an object.
AMPLIAR CONOCIMIENTOS
3.2 Números
En esta sección veremos los tipos de datos númericos que ofrece Python centrándonos en
booleanos, enteros y flotantes.20
3.2.1 Booleanos
George Boole es considerado como uno de los fundadores del campo de las ciencias de la
computación y fue el creador del Álgebra de Boole que da lugar, entre otras estructuras
algebraicas, a la Lógica binaria. En esta lógica las variables sólo pueden tomar dos valores
discretos: verdadero o falso.
El tipo de datos bool proviene de lo explicado anteriormente y admite dos posibles valores:
20
Foto original de portada por Brett Jordan en Unsplash.
3.1. Datos 55
Aprende
Python
• True que se corresponde con verdadero (y también con 1 en su representación numérica).
• False que se corresponde con falso (y también con 0 en su representación numérica).
Veamos un ejemplo de su uso:
La primera variable is_opened está representando el hecho de que algo esté abierto, y al tomar
el valor True podemos concluir que sí. La segunda variable has_sugar nos indica si una bebida
tiene azúcar; dado que toma el valor False inferimos que no lleva azúcar.
Atención: Tal y como se explicó en este apartado, los nombres de variables son «case
sensitive». De igual modo el tipo booleano toma valores True y False con la primera letra
en mayúsculas. De no ser así obtendríamos un error sintáctico.
Literales enteros
>>> 08
A continuación se muestra una tabla con las distintas operaciones sobre enteros que podemos realizar
en Python:
Tabla 4: Operaciones con enteros en Python
Operador Descripción Ejemplo Resultad
o
+ Suma 3+9 12
- Resta 6-2 4
* Multiplicación 5*5 25
// División entera 9 // 2 4
% Módulo 9%4 1
** Exponenciación 2 ** 4 16
>>> 2 + 8 + 4
14
>>> 4 ** 4
256
57
Aprende
Python
>>> 7 / 3
2.3333333333333335 >>> 7 // 3
2
>>> 6 / 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
Es de buen estilo de programación dejar un espacio entre cada operador. Además hay que tener
en cuenta que podemos obtener errores dependiendo de la operación (más bien de los
operandos) que estemos utilizando, como es el caso de la división por cero.
Igualmente es importante tener en cuenta la prioridad de los distintos operadores:
Prioridad Operador
1 (mayor) ()
2 **
3 -a+a
4 *///%
5 (menor) +-
>>> 2 ** 2 + 4 / 2
6.0
>>> 2 ** (2 + 4) / 2
32.0
3.2. Números
(proviene de la página anterior)
>>> 2 ** (2 + 4 / 2)
16.0
Asignación aumentada
Python nos ofrece la posibilidad de escribir una asignación aumentada mezclando la asignación y un
operador.
Supongamos que disponemos de 100 vehículos en stock y que durante el pasado mes se han
vendido 20 de ellos. Veamos cómo sería el código con asignación tradicional vs. asignación
aumentada:
Estas dos formas son equivalentes a nivel de resultados y funcionalidad, pero obviamente
tienendiferenciasdeescrituraylegibilidad.Deestemismomodo,podemosaplicarunformato
compacto al resto de operaciones:
59
Aprende
Python
>>> random_number = 15
>>> random_number += 5
>>> random_number
20
>>> random_number *= 3
>>> random_number
60
Módulo
La operación módulo (también llamado resto), cuyo símbolo en Python es %, se define como el
resto de dividir dos números. Veamos un ejemplo para enteder bien su funcionamiento:
>>> cociente
3
>>> resto
2
3.2. Números
Exponenciación
60 Capítulo 3. Tipos de datos
Aprende Python
Para elevar un número a otro en Python utilizamos el operador de exponenciación **:
>>> 4 ** 3
64
>>> 4 * 4 * 4
64
Se debe tener en cuenta que también podemos elevar un número entero a un número decimal. En este
caso es como si estuviéramos haciendo una raíz2. Por ejemplo:
Hecho en Python:
>>> 4 ** 0.5
2.0
Ejercicio pycheck:
quadratic
Valor absoluto
>>> abs(1) 1
>>> abs(-3.14)
3.14
>>> abs(3.14)
3.14
2
No siempre es una raíz cuadrada porque se invierten numerador y denominador.
Límite de un entero
Nivel avanzado
61
Aprende
Python
¿Cómo de grande puede ser un int en Python? La respuesta es de cualquier tamaño. Por poner
un ejemplo, supongamos que queremos representar un centillón. Este valor viene a ser un «1»
seguido por ¡600 ceros! ¿Será capaz Python de almacenarlo?
>>> centillion
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0 0000
Nota: En muchos lenguajes tratar con enteros tan largos causaría un «integer overflow». No es el
caso de Python que puede manejar estos valores sin problema.
¿Qué pasaría si quisiéramos «romper» todas las barreras? Pongamos 10.000 dígitos…
>>> 10 ** 10_000
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Exceeds the limit (4300) for integer string conversion; use sys.set_int_
,→max_str_digits() to increase the limit
Obtenemos un error… pero subsanable, ya que hay forma de ampliar este límite inicial
de 4300 dígitos usando la función sys.set_int_max_str_digits()
3.2.3 Flotantes
Los números en punto flotante3 tienen parte decimal. Veamos algunos ejemplos de flotantes en Python.
3.2. Números
(proviene de la página anterior)
>>> 4.000_000
4.0
62 Capítulo 3. Tipos de datos
Aprende Python
>>> 4e0 # 4.0 * (10 ** 0)
4.0
Conversión de tipos
Conversión implícita
>>> True + 25
26
>>> 7 * False
0 >>> True + False
1
>>> 21.8 + True
22.8
>>> 10 + 11.3
21.3
Se puede ver claramente que la conversión numérica de los valores booleanos es:
• True 1
• False 0
Conversión explícita
Aunque más adelante veremos el concepto de función, desde ahora podemos decir que existen
una serie de funciones para realizar conversiones explícitas de un tipo a otro: bool() Convierte el
63
Aprende
Python
tipo a booleano. int() Convierte el tipo a entero. float() Convierte el tipo a flotante. Veamos
algunos ejemplos de estas funciones:
>>> bool(1)
True
>>> bool(0)
False
>>> int(True)
1 >>> int(False)
0
>>> float(1)
1.0 >>> float(0)
0.0
>>> float(True)
1.0 >>> float(False)
0.0
En el caso de que usemos la función int() sobre un valor flotante nos retornará su parte baja:
⌊︀ ⌋︀
int(x) = x Por
ejemplo:
>>> int(3.1)
3
>>> int(3.5)
3
>>> int(3.9)
3
3.2. Números
(proviene de la página anterior)
bool
>>> sound_level = 35
>>> type(sound_level)
int
Pero también existe la posibilidad seguimos comprobar el tipo que tiene una variable mediante la función
isinstance():
Ejercicio pycheck:
sin_approx
Errores de aproximación
Nivel intermedio
Supongamos el siguiente cálculo:
>>> (19 / 155) * (155 / 19)
0.9999999999999999
Debería dar 1.0, pero no es así puesto que la representación interna de los valores en coma flotante sigue
el estándar IEEE 754 y estamos trabajando con aritmética finita.
Aunque existen distintas formas de solventar esta limitación, de momento veremos una de las
más sencillas utilizando la función «built-in» round() que nos permite redondear un número
flotante a un número determinado de decimales:
>>> pi = 3.14159265359
>>> round(pi)
(continué en la próxima página)
(proviene de la página anterior)
3 >>>
round(pi, 1)
3.1 >>>
round(pi, 2)
3.14 >>>
round(pi, 3)
65
Aprende
Python
3.142 >>>
round(pi, 4)
3.1416 >>>
round(pi, 5)
3.14159
>>> round(result, 1)
1.0
Prudencia: round() aproxima al valor más cercano, mientras que int() obtiene siepre el
entero «por abajo».
Límite de un flotante
A diferencia de los enteros, los números flotantes sí que tienen un límite en Python. Para descubrirlo
podemos ejecutar el siguiente código:
>>> sys.float_info.min
2.2250738585072014e-308
>>> sys.float_info.max
1.7976931348623157e+308
3.2. Números
3.2.4 Bases
Nivel intermedio
Base binaria
>>> 0b1001
9
>>> 0b1100
12
Función: bin()
>>> bin(9)
0b1001
>>> bin(12)
0b1100
Base octal
Función: oct()
>>> oct(3235)
0o6243
>>> oct(687)
0o1257
Base hexadecimal
67
Aprende
Python
>>> 0x7F2A
32554
>>> 0x48FF
18687
Función: hex()
>>> hex(32554)
0x7f2a
>>> hex(18687)
0x48ff
EJERCICIOS DE REPASO
1. pycheck: circle_area
2. pycheck: sphere_volume
3. pycheck: triangle_area
4. pycheck: interest_rate
5. pycheck: euclid_distance
6. pycheck: century_year
7. pycheck: red_square
8. pycheck: igic
9. pycheck: super_fast
10. pycheck: move_twice
11. pycheck: pillars
12. pycheck: clock_time
13. pycheck: xor
3.2. Números
EJERCICIOS EXTERNOS
AMPLIAR CONOCIMIENTOS
Las cadenas de texto son secuencias de caracteres. También se les conoce como «strings» y nos
permiten almacenar información textual de forma muy cómoda.21
Para incluir comillas dobles dentro de la cadena de texto no hay mayor inconveniente:
21
Foto original de portada por Roman Kraft en Unsplash.
22
También es posible utilizar comillas dobles. Yo me he decantado por las comillas simples ya que quedan más
limpias y suele ser el formato que devuelve el propio intérprete de Python.
Puede surgir la duda de cómo incluimos comillas simples dentro de la propia cadena de texto.
Veamos soluciones para ello:
En la primera opción estamos escapando las comillas simples para que no sean tratadas como
caracteres especiales. En la segunda opción estamos creando el «string» con comillas dobles
(por fuera) para poder incluir directamente las comillas simples (por dentro). Python también
nos ofrece esta posibilidad.
Comillas triples
Hay una forma alternativa de crear cadenas de texto utilizando comillas triples. Su uso está
pensado principalmente para cadenas multilínea:
>>> poem = To be, or not to be, that is the question:
... Whether tis nobler in the mind to suffer
... The slings and arrows of outrageous fortune,
... Or to take arms against a sea of troubles
Importante: Los tres puntos ... que aparecen a la izquierda de las líneas no están incluidos en la
cadena de texto. Es el símbolo que ofrece el intérprete de Python cuando saltamos de línea.
Cadena vacía
La cadena vacía es aquella que no contiene ningún carácter. Aunque a priori no lo pueda
parecer, es un recurso importante en cualquier código. Su representación en Python es la
siguiente:
>>>
Para el caso contrario de convertir un «string» a un valor numérico, tenemos a disposición las
funciones ya vistas:
>>> int(10)
10
>>> float(21.7)
21.7
Pero hay que tener en cuenta un detalle. La función int() también admite la base en la que se
encuentra el número. Eso significa que podemos pasar un número, por ejemplo, en hexadecimal
(como «string») y lo podríamos convertir a su valor entero:
>>> int(FF, 16)
255
Nota: La base por defecto que utiliza int() para convertir cadenas de texto es la base decimal.
# Tabulador
>>> msg = Valor = \t40
>>> print(msg)
Valor = 40
# Comilla simple
>>> msg = Necesitamos \ escapar\ la comilla simple
>>> print(msg)
Necesitamos escapar la comilla simple
# Barra invertida
>>> msg = Capítulo \\ Sección \\ Encabezado
>>> print(msg)
Capítulo \ Sección \ Encabezado
Nota: Al utilizar la función print() es cuando vemos realmente el resultado de utilizar los
caracteres escapados.
Expresiones literales
Nivel intermedio
Hay situaciones en las que nos interesa que los caracteres especiales pierdan ese significado y
poder usarlos de otra manera. Existe un modificar de cadena que proporciona Python para
tratar el texto en bruto. Es el llamado «raw data» y se aplica anteponiendo una r a la cadena de
texto.
Veamos algunos ejemplos:
10
11
Línea 4: Podemos imprimir todas las variables que queramos separándolas por comas.
Línea 7: El separador por defecto entre las variables es un espacio, podemos cambiar el carácter
que se utiliza como separador entre cadenas.
Línea 10: El carácter de final de texto es un salto de línea, podemos cambiar el carácter que se
utiliza como final de texto.
Nota: La función input() siempre nos devuelve un objeto de tipo cadena de texto o str. Tenerlo
muy en cuenta a la hora de trabajar con números, ya que debemos realizar una conversión
explícita.