02 Fundamentos de Python
02 Fundamentos de Python
© Ediciones Roble, S. L.
Indice
Fundamentos de Python 3
I. Introducción 3
II. Objetivos 3
III. Lenguaje de programación Python 4
3.1. El lenguaje de programación Python 4
IV. Entorno de programación: Jupyter Notebook 5
4.1. Instalación de una distribución Anaconda para Jupyter Notebook 5
4.1.1. Características de Jupyter Notebook 5
4.1.2. Instalación de Anaconda 6
4.2. Primeros pasos con Jupyter Notebook 18
V. Sintaxis básica de Python 28
5.1. Declaración de variables 28
5.2. Comentarios 29
5.3. Operadores 30
5.4. Tipos de variables 39
VI. Herramientas para control de flujo 41
6.1. Condicionales 42
6.2. Bucles 46
6.2.1. Bucle for 46
6.2.2. Bucle while 49
VII. Estructuras de datos 51
7.1. Tuplas 51
7.2. Listas 53
7.3. Diccionarios de datos 62
VIII. Funciones 68
8.1. Funciones 68
8.2. Cómo definir y llamar funciones 69
8.3. Ejemplo del uso de funciones 71
8.4. Llamar funciones dentro de una funciones 73
IX. Resumen 81
Ejercicios 83
Caso práctico 83
Recursos 85
Bibliografía 85
Glosario. 85
2/87
Fundamentos de Python
Fundamentos de Python
I. Introducción
En esta primera unidad, se introducirá al alumno en el lenguaje de programación Python.
Se enseñarán sus fundamentos principales, como la declaración de variables, los operadores básicos y
distinguir entre diferentes tipos de variables, así como las principales herramientas para controlar el flujo del
programa.
Posteriormente, el alumno comenzará a trabajar con las principales estructuras de datos de Python, que son:
tuplas, listas y diccionarios de datos; tras ello, para saber cómo modularizar los programas, se aprenderá a
diseñar funciones sencillas mediante la entrada y salida de parámetros.
II. Objetivos
Una vez finalizada esta unidad, el alumno habrá adquirido las siguientes competencias sobre los fundamentos de
Python.
Trabajar con las principales estructuras de datos en Python: tuplas, listas y diccionarios de datos.
3/87
Fundamentos de Python
Estas razones, ligadas al gran auge de la ciencia de datos, han catapultado la popularidad de
Python, el cual es actualmente catalogado como uno de los lenguajes de programación más
populares del mundo[2].
Orientado a objetos
Permite representar conceptos del mundo real a través de clases y objetos en un programa.
Multiplataforma
Python está disponible en los principales sistemas operativos como Linux, Windows, UNIX, Mac OS, etc. Esto
supone que un programa o script Python pueda ser ejecutado en diferentes sistemas operativos siempre que
este sistema cuente con un intérprete Python adecuado.
Tipado dinámico
A diferencia de otros lenguajes de programación, Python posee un tipado dinámico, lo que significa que no se
debe especificar el tipo de una variable, sino que esta tomará el tipo directamente en tiempo de ejecución en
función del valor que se le asigne o que reciba.
Lenguaje interpretado
Básicamente, la ejecución de los programas se realizará a través del script que ejecuta el intérprete de Python,
por lo tanto, no necesita compilación.
4/87
Fundamentos de Python
Evolución de Python[3]
Todas las razones anteriormente mencionadas hacen que Python tenga una curva de
aprendizaje corta, es decir: un desarrollador que empieza escribiendo programas muy
básicos puede avanzar rápidamente a programas avanzados que incluyan, por ejemplo, el uso
de librerías de código, la lectura de datos desde diversas fuentes.
Otro de los puntos fuertes de Python y de gran utilidad para el mundo del big data, del data science (ciencia de
datos) y de la inteligencia artificial es que, en Python, se puede trabajar a través de librerías. En este sentido,
Python posee potentes librerías de cálculo matricial y analítica de datos como Pandas, Numpy, Scipy, Scikit Learn,
Tensorflow, Keras, etc.
[2]Python: el lenguaje de programación más relevante de 2018. [En línea] URL disponible en: https://www.neoteo.com/pyt
hon-lenguaje-de-programacion-mas-relevante/
[3]Página principal de la comunidad Python. [En línea] URL disponible en: https://www.python.org/
Una vez vistas las principales características de Python, es hora de escoger un entorno de
programación adecuado. Para ello, haremos uso de Jupyter Notebook.
5/87
Fundamentos de Python
¿Qué es?
Es un entorno de programación que se ejecuta íntegramente sobre nuestro navegador web predeterminado
(Google Chrome, Firefox, Safari, etc.). Se basa en la idea de poder compartir todo el trabajo de un
desarrollador, desde el código fuente, comentarios, gráficas, vídeos, hasta anotaciones, como si de un cuaderno
se tratase (de ahí la denominación de “notebook”).
Es muy extendido entre la comunidad científica, especialmente en el campo de la ciencia de datos, ya que es un
buen soporte para poder trabajar y mostrar experimento.
Esto es debido a que sobre un mismo notebook, tal y como hemos mencionado antes, podemos mostrar
nuestro código Python, comentarios en el código, incluir anotaciones y, finalmente, mostrar resultados de forma
interactiva.
No solamente podemos incluir código de Python, sino que, además, podemos combinar otros lenguajes, como
HTML, Markdown, Latex o JavaScript, entre otros.
Otra de sus características importantes es que permite autocompletar el código que se va escribiendo; esto es
de gran ayuda pues permite identificar fácilmente variables y funciones, muestra ayuda en línea, etc.
Para esta ocasión, y aprovechando todas las ventajas que ofrece para la enseñanza, utilizaremos Jupyter
Notebook; para ello, descargaremos una distribución de Anaconda[5], que incluirá por defecto un intérprete
Python y nos permitirá desplegar Jupyter Notebook en nuestro navegador web.
Los pasos para la descarga e instalación de una distribución de Anaconda son los siguientes:
6/87
Fundamentos de Python
Accedemos a la web de Anaconda Distribution. [En línea] URL disponible en: https://www.anaconda.com/distribu
tion/
Fuente: https://www.anaconda.com/distribution/
Pulsamos en el botón “Download” y nos llevará a la siguiente sección de descargas para descargar una versión
de Python.
Fuente: https://www.anaconda.com/distribution/
7/87
Fundamentos de Python
Descargaremos la versión de Python 3.7; para ello, simplemente pulsamos en el botón verde “Download”.
Automáticamente, comenzará la descarga del archivo ejecutable que contendrá la distribución de Anaconda.
8/87
Fundamentos de Python
9/87
Fundamentos de Python
Seleccionamos el tipo de instalación (puede dejarse por defecto para que se descargue únicamente en nuestro
usuario).
10/87
Fundamentos de Python
Seleccionamos la ruta de instalación (se recomienda utilizar la que aparece por defecto).
11/87
Fundamentos de Python
12/87
Fundamentos de Python
13/87
Fundamentos de Python
14/87
Fundamentos de Python
Si lo deseamos, marcamos las opciones para aprender más sobre Anaconda y los primeros pasos con
Anaconda, y pulsamos “Finish”.
Una vez ha finalizada la instalación de Anaconda, mostraremos cómo lanzar en el navegador web nuestro
primer notebook en Python. Para ello, realizaremos los siguientes pasos:
15/87
Fundamentos de Python
16/87
Fundamentos de Python
El siguiente panel de navegación muestra que se ha lanzado correctamente Jupyter Notebook en nuestro
entorno local. Si atendemos a la URL, podremos ver que está activo en localhost en el puerto 8888. Dentro de la
interfaz web, podremos movernos entre los diferentes directorios y crear nuevos archivos como, en nuestro
caso, un nuevo notebook. Para realizar esta acción, simplemente pulsaremos en el desplegable “New” > ”Python
3”.
17/87
Fundamentos de Python
Aparecerá la siguiente vista con un notebook vacío. Por defecto se llamará “Untitled”.
“File”
Dentro de esta sección podemos crear un nuevo notebook, renombrarlo, hacer una copia, guardar un checkpoint
del mismo, imprimirlo y descárgalo. Las opciones que más utilizaremos serán:
“Notebook”
Guarda todo el notebook, en el que estará incluida una vista de los resultados con extensión “.ipynb”. De esta
forma, podremos, posteriormente, ejecutar o modificar el notebook guardado.
“HTML”
Guarda todo el notebook en formato HTML para que sea visible desde un navegador. Esta es una forma
recomendable de mostrar resultados, ya que puede verse con facilitad todo el código implementado,
comentarios, anotaciones y resultados en un mismo documento.
“Python”
Guarda todo el notebook como un script de Python con extensión “.py” para que sea ejecutable desde un
intérprete de Python.
18/87
Fundamentos de Python
19/87
Fundamentos de Python
“Edit”
Desde esta sección podremos, básicamente, gestionar las celdas de código o anotaciones, ya sea copiando,
cortando o borrando celdas como operaciones más básicas. Posteriormente, también tendremos opciones más
avanzadas en edición de celdas, como dividir en dos una celda o juntar dos celdas en una. Además, podremos
moverlas de posición hacia arriba o hacia abajo. Esto es muy recomendable para ir organizando nuestro código
y que quede de una forma más legible.
20/87
Fundamentos de Python
“Insert”
Esta sección es la encargada de poder insertar nuevas celdas, ya sea a continuación de la celda en donde
tengamos el cursor o después de esta.
“Cell”
Esta parte se encarga de ejecutar las celdas de código. Podremos elegir entre una sola celda, ejecutar desde el
cursor hasta el final, ejecutar desde el principio hasta el cursor o ejecutar todas las celdas.
Es también muy importante hacer énfasis en los tipos de celda que podemos encontrarnos en un notebook:
“Code”
“Markdown”
Celdas con anotaciones estilo markdown (muy aconsejable para documentar nuestros notebooks).
“Raw NBConvert”
Celdas en crudo. La ejecución de estas celdas no produce ninguna salida (por lo general, es un formato poco
utilizado).
21/87
Fundamentos de Python
22/87
Fundamentos de Python
Kernel
Esta es una de las secciones más importantes, ya que se encarga de mantener activo el kernel de Python. A
través de esta sección podremos pararlo, reiniciarlo, reiniciar y limpiar los output de las celdas, reiniciar y
ejecutar todas las celdas, reconectar y apagar el kernel.
Siempre que se interrumpa la actividad del kernel, todas las variables que estuvieran almacenadas en memoria
se borrarán.
Además de las secciones explicadas anteriormente, existen otras secciones no tan comunes que no es
necesario exponer en este momento; no obstante, es importante prestar especial atención a otros elementos
importantes de la interfaz de un notebook, que son los siguientes.
Botonera principal
En ella podremos encontrar los botones principales para poder gestionar el notebook y sus celdas, como
guardar el notebook, añadir, cortar, copiar y pegar celdas, moverlas de posición, así como ejecutar una celda
del notebook o parar la ejecución. Al igual que en la sección “ Cell”, podremos definir el tipo de celda que
queremos implementar a través del menú desplegable.
23/87
Fundamentos de Python
Celda o chunk
D entro de una celda, escribiremos el código fuente que queramos implementar en Python, comentarios o
anotaciones markdown. A medida que vayamos ejecutando celdas, dentro del apartado “ In [ ]” podremos ver el
seguimiento del código, ya que dentro de este apartado se guarda el orden en el que se han ido ejecutando las
celdas.
Finalmente, antes de comenzar con la programación en Python, es importante ver algunas de las principales
anotaciones que podemos realizar a través de “Markdown”:
24/87
Fundamentos de Python
Encabezados
25/87
Fundamentos de Python
Listas no numeradas
26/87
Fundamentos de Python
Listas enumeradas
Estilos de texto
27/87
Fundamentos de Python
Si se desea, puede descargarse el código que se vio con anterioridad a través de los
siguientes enlaces:
Markdown_basicos.ipynb
Markdown_basicos.html
Para seguir esta sección se recomienda hacer uso de los siguientes archivos:
Sintaxis_Python.ipynb
Sintaxis_Python.html
Mediante el archivo Sintaxis_Python.html se verá el contenido de todo el notebook, tanto el código como los
resultados; además es posible modificarlo.
Por otro lado, mediante el archivo Sintaxis_Python.ipynb se podrá modificar el notebook y el código incluido en
este, así como ejecutar las diferentes celdas para visualizar resultados. Para abrir el archivo en primer lugar será
necesario buscar la ruta del archivo y hacer clic en él, después, desde Anaconda Navigator, automáticamente
aparecerá todo el contenido de este.
Para declarar una variable en Python, simplemente tomaremos el nombre de una variable y le asignaremos un valor
con el operador “=”.
Por ejemplo:
a=5
b = 2.32
c = ‘Hola’
Para mostrar el valor de una variable, basta con escribir el nombre de la misma, utilizar la función “print()” y escribir
dentro de los paréntesis el nombre de la variable.
28/87
Fundamentos de Python
5.2. Comentarios
Python dispone de dos tipos principales de comentarios:
De una línea
Multilínea
Se utilizan tres dobles comillas (“ “ “) para abrir el comentario. Este no finaliza hasta que volvemos a introducir
otras tres comillas (“ “ “). Este tipo de comentario es muy útil para documentar la ayuda de una función. Si en vez
de utilizar este tipo de comentarios dentro de una función, se utilizan estos comentarios en una celda normal,
Python lo interpretará como una cadena de texto.
29/87
Fundamentos de Python
Dentro de una celda, podemos comentar varias líneas de código si las seleccionamos y
pulsamos “CNTRL + /”. Es importante destacar que todas las líneas que hayamos seleccionado
pasarán a ser comentarios de una línea (con el símbolo “#”).
5.3. Operadores
Se utilizan para poder comparar y asignar variables, los operadores más importantes de Python se reparten en las
siguientes categorías:
Operadores aritméticos
Sirven para realizar operaciones entre dos variables, para devolver un resultado.
Operadores de asignación
Sirven para realizar una asignación, lo que crea una nueva variable; o realizan una operación aritmética sobre
una nueva variable ya existente.
30/87
Fundamentos de Python
Operadores de comparación
Sirven para comparar el valor de una expresión entre dos variables y devuelven un valor booleano.
Operadores de identidad
Sirven para expresar si existe igualdad entre dos variables y devuelven un valor booleano.
Operadores de pertenencia
Sirven para expresar si una cadena de texto está dentro de otra cadena de texto y devuelven un valor booleano.
A continuación, mostraremos una tabla para cada tipo de operador en función de su categoría.
Operadores aritméticos
Operadores aritméticos
Operación Código
Suma a+b
Resta a–b
Multiplicación a*b
Exponencial a ** b
División entera a // b
31/87
Fundamentos de Python
Operadores de asignación
32/87
Fundamentos de Python
Operadores de asignación
Asignación a=b
Suma a += b a=a+b
Resta a –= b a=a-b
Multiplicación a *= b a=a*b
Exponencial a **= b a = a ** b
33/87
Fundamentos de Python
Operadores de comparación
34/87
Fundamentos de Python
Operadores de comparación
Comparador Código
Igual que x == y
Distinto que x != y
Or x > y or x < z
35/87
Fundamentos de Python
36/87
Fundamentos de Python
Operadores de identidad
Operadores de identidad
Comparador Código
Is x is y
Is not x is not y
37/87
Fundamentos de Python
Operadores de pertenencia
Operadores de pertenencia
Comparador Código
In ‘a’ in ‘hola’
38/87
Fundamentos de Python
Una vez vistos los principales tipos de operadores y qué operaciones podemos realizar con ellos, es el momento
de conocer cuáles son los principales tipos de variables en Python y, además, descubrir cómo conocer el tipo de
una variable.
Numéricas: dentro de esta categoría podemos encontrar dos tipos de números que podemos declarar como
variables.
Enteros.
Decimales.
Cadenas de texto.
39/87
Fundamentos de Python
Cada tipo de variable se representa con una clase en Python. Hay que tener en cuenta que las estructuras de datos
también cuentan con una clase de Python y que los paquetes que importemos contarán con tipos especiales de
clases.
Para conocer el tipo de una variable haremos uso de la función “type()”. Los tipos básicos de variables se
representan con las siguientes clases:
40/87
Fundamentos de Python
Uno de los aspectos fundamentales que debemos cuidar a la hora de desarrollar, ya sea en
Python o en cualquier otro lenguaje de programación, es el flujo del programa. Esto
garantizará que las variables se procesen de forma correcta, hasta obtener los resultados
deseados.
Las estructuras de control de flujo que se verán a continuación permiten tomar decisiones acerca de cómo debe
continuar la ejecución de un programa.
Las de tipo condicional utilizan expresiones del tipo si (condición), entonces (acción).
Otras utilizan bucles que permiten continuar ejecutando una operación, bien hasta que se cumple una cierta
condición, bien mientras se cumpla una cierta condición.
41/87
Fundamentos de Python
Herramientas_control_flujo.ipynb
Herramientas_control_flujo.html
6.1. Condicionales
Este tipo de estructura de control se basa en la utilización de los operadores booleanos (de comparación,
vistos anteriormente). El funcionamiento se rige por la construcción de una expresión booleana. Si (if) esta
expresión se cumple, realizamos una acción; si no (else), se cumple otra acción.
El tipo más básico que podemos encontrarnos es un if simple. En donde, si se cumple la expresión booleana,
realizamos una acción. Si esta expresión no se cumple, simplemente no hacemos nada.
Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf
Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf
42/87
Fundamentos de Python
Cuando no se cumple la expresión booleana, se continúa el flujo del programa hacia el “si no” (else). En un if
simple se añadiría la estructura if – else.
Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf
En el ejemplo anterior, si no se cumple la expresión booleana, no ocurre nada. Para especificar esta acción,
existe una palabra reservada, que es “pass”; indica que continúa la ejecución del programa sin hacer nada. Por
defecto se realiza ante la ausencia de un else, pero es aconsejable su uso para mejorar la legibilidad de los
programas. El ejemplo anterior sería equivalente añadiendo else – pass de la siguiente manera.
43/87
Fundamentos de Python
Otro ejemplo posible sería el siguiente: determinar si un número es par o impar. En esta ocasión, se utilizaría el
operador aritmético “%” para resto o módulo. Si el resultado es 0, un número será par; de lo contrario, impar.
Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf
Otro tipo de condicional es el encadenado. Esta estructura de control se basa en que si la expresión booleana
no se cumple, se abre una nueva expresión booleana como un nuevo if; si se requiere, pueden abrirse n nuevas
expresiones booleanas hasta que lleguemos a else, que significa la finalización del if – elif – else.
Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf
44/87
Fundamentos de Python
Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf
El último condicional que se puede construir es condicional anidado. Este tipo se basa en incluir un condicional
dentro de un condicional.
Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf
45/87
Fundamentos de Python
Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf
6.2. Bucles
Algo muy habitual durante el desarrollo es tener que realizar una misma operación varias veces; para ello, existen
los bucles, que es donde se puede realizar iterativamente una operación.
Por ejemplo, si estamos explorando un dataset, es bastante probable que queramos aplicar
una misma operación en cada fila de los datos. Los principales bucles que vamos a utilizar son
bucle for y bucle while.
El bucle for se basa en realizar de forma secuencial una misma tarea tantas veces como longitud tenga el tamaño
de la secuencia.
Su estructura es la siguiente
Nótese que, en este caso, índice y secuencia serán variables definidas por el usuario. La variable índice sirve para
denotar la posición en el bucle for. Por ejemplo, si queremos imprimir los números del 1 al 10, el número de índice
sería 1, 2, […], 10.
46/87
Fundamentos de Python
Para el siguiente ejemplo, utilizaremos la función “range()”, la cual toma un número como parámetro y genera
una secuencia de números del cero a n.
47/87
Fundamentos de Python
Para combinar algunas partes del temario ya vistas, se propone un ejercicio en el cual, a través de una
secuencia del cero al diez, se determine si el número es par, se muestre su exponencial de dos y, si no, que lo
divida entre dos.
48/87
Fundamentos de Python
Al igual que los condicionales, los bucles for también pueden anidarse. Para ver esto en un ejemplo sencillo, se
propondrá el ejemplo de un programa que realice la tabla de multiplicar del uno al nueve. Para ello, se tendrá en
cuenta que el primer bucle for primero recorrerá el ítem uno; posteriormente, nos encontraremos el segundo
bucle for anidado que provocará que el ítem se vaya calculando de nuevo del cero al nueve. Para añadir un
pequeño condicionante, no se mostrará la tabla del cero.
Como puede comprobarse en el ejemplo anterior, el concepto más importante es que los bucles anidados se
ejecutan de abajo a arriba, es decir: el primer bucle for no cambia al siguiente elemento hasta que el bucle for
anidado finaliza todo su recorrido.
En este caso, este bucle se basa en realizar una misma acción hasta que una expresión booleana definida
por el usuario no se cumpla. Se propone un ejemplo muy sencillo: mientras el valor numérico de una variable
(con valor “1”) no sea igual a “10”, imprimiremos “ERROR !” en cada iteración y sumaremos uno al valor actual de la
variable.
49/87
Fundamentos de Python
Como se puede observar, cuando el bucle while finaliza su procesamiento, se puede añadir la sentencia de
control else para realizar una acción diferente.
Se utilizará una nueva función: “input()”. Esta función sirve para solicitar al usuario por teclado una cadena de
texto. En el siguiente ejercicio, mientras el usuario no teclee la cadena de texto “‘fin’”, el programa seguirá
solicitando la entrada de una nueva cadena de texto.
50/87
Fundamentos de Python
Estructuras_datos.ipynb
Estructuras_datos.html
7.1. Tuplas
Se trata de la estructura de datos más básica. Toda la información se almacena entre paréntesis y separada por
comas.
Es importante recalcar que las tuplas soportan diferentes tipos de datos y que es posible la
creación de tuplas con elementos de diferente longitud.
51/87
Fundamentos de Python
Soportan indexación
Es decir: podemos acceder a los contenidos en la tupla indicando sus índices entre corchetes ([ ]). Es
importante que sepamos que los índices de las tuplas comienzan en “0” y no en “1”.
52/87
Fundamentos de Python
No son mutables
7.2. Listas
De un modo similar a una tupla, una lista es una secuencia de valores. También acepta valores de cualquier tipo.
En este caso, su representación es entre corchetes ([ ]) y todos sus valores separados por comas.
53/87
Fundamentos de Python
Anidables
54/87
Fundamentos de Python
Mutables
Una de las grandes ventajas, además de poder manejarlas a través de sus índices, es que también podemos
cambiar su valor a través de su índice, es decir: son mutables.
En el trabajo con datos, son sin duda una de las estructuras de datos más utilizadas, principalmente por la amplia
gama de funciones que permiten realizar sobre las mismas. Describimos las más importantes:
55/87
Fundamentos de Python
“append”
“clear”
Borra por completo todos los elementos de una lista, lo que deja una lista vacía.
56/87
Fundamentos de Python
“copy”
Permite copiar una lista. Es importante añadir que, si simplemente asignamos una lista a una variable, ambas
compartirán las posiciones de memoria; así pues, para evitar este problema, conviene usar la opción “copy”.
57/87
Fundamentos de Python
“extend”
“index”
“insert”
58/87
Fundamentos de Python
“pop”
“remove”
“reverse”
59/87
Fundamentos de Python
“sort”
Uno de los aspectos más importantes a la hora de trabajar con listas es saber cómo iterar y recorrer sus elementos;
para ello, lo más habitual suele ser utilizar el bucle for. Las dos formas más comunes son:
60/87
Fundamentos de Python
Es importante enfatizar en que la función “range” nos permite generar una secuencia de números, pero no
siempre desde cero a n; por lo tanto, si no queremos procesar n elementos de la lista, podemos hacer lo
siguiente: en este caso, procesaremos únicamente del índice “2” al final de la lista.
61/87
Fundamentos de Python
Finalmente, podemos ver cómo una lista también tiene una clase propia.
Son una de las estructuras más rápidas en lo que a procesamiento se refiere. Tal y como hemos visto, los
índices de las listas son números enteros del 0 a n (final de la lista). En este caso, en los diccionarios, un índice
puede ser también un string u otro tipo de identificador, siempre y cuando se cumpla una regla básica.
Estos índices son únicos, así que no pueden repetirse.
La estructura que presenta un diccionario de datos, es que todos los datos van entre llaves ({ }) y cualquier valor
viene precedido por un campo clave, lo que resulta de la siguiente manera: { Clave : Valor }
62/87
Fundamentos de Python
Los diferentes ítems de un diccionario de datos se irán separando por comas: { Clave_1: Valor_1, Clave_2 :
Valor_2, … , Clave_n, Valor_n }
63/87
Fundamentos de Python
Del mismo modo que hemos visto que las tuplas y las listas pueden anidarse, los diccionarios de datos
también. En este caso, una clave contiene como campo de valor un nuevo diccionario.
sub_clave_2 : valor_2,
…,
sub_clave_n : valor_n }
clave_2 : valor }
Existen dos funciones principales para poder acceder tanto a los campos clave como a los campos valor que son
“keys()” y “values()”.
64/87
Fundamentos de Python
“keys()”
“values()”
65/87
Fundamentos de Python
Como hemos podido comprobar, tanto los valores como las claves son listas, por lo tanto, cuando
queramos saber si un ítem es un campo clave, podemos buscarlo como si de una lista se tratase. Si el campo
se encuentra en el diccionario, nos devolverá su valor; de lo contrario, mostrará un error.
Al igual que en las listas, con la función “.clear” podemos borrar todo el diccionario.
66/87
Fundamentos de Python
Si queremos borrar un campo completo, podemos realizarlo a través de la función “.pop”, a la cual le pasaremos
como argumento el campo clave.
Eliminar elementos
Otra función con la que podemos eliminar elementos de un diccionario de datos, es “.popitem”. A través de esta
función, borraremos el último elemento insertado.
67/87
Fundamentos de Python
Como ya hemos visto con el resto de estructuras de datos, un diccionario de datos tiene una clase propia: dict.
VIII. Funciones
8.1. Funciones
Las funciones de Python son muy importantes a la hora de estructurar el código de una manera profesional.
Deberán utilizarse siempre que tenga sentido, por ejemplo, si se está repitiendo el mismo
bloque de código continuamente a lo largo de un programa, probablemente se debería estar
encapsulando ese código dentro de una función.
Básicamente, una función es un fragmento o bloque de código que solamente se ejecuta cuando este es
llamado. A cualquier función le podemos pasar parámetros de entrada o argumentos y devolver resultados
como parámetros de salida.
68/87
Fundamentos de Python
FUNCIONES.ipynb
FUNCIONES.html
Empezaremos por la función más básica, una en la que no utilicemos parámetros de entrada ni de salida.
def saludar():
print('Hola !')
saludar()
69/87
Fundamentos de Python
Ahora, probaremos a añadir un argumento. Es importante señalar que ahora, cuando llamemos a la función,
tendremos que utilizar el nombre del argumento como entrada y el valor que pasaremos a este argumento.
def saluda_nombre(nombre):
saluda_nombre(nombre='Juan')
Añadir más de un parámetro simplemente hará que tengamos que pasar más información a nuestra función.
70/87
Fundamentos de Python
Cuando queremos devolver algún resultado a través de una función, haremos uso de la palabra clave return. Si
devolvemos más de un resultado, estos irán separados por comas.
def obten_precio_total(precio):
return precio_final
precio_total = obten_precio_total(precio=2000)
71/87
Fundamentos de Python
def pares_impares(numbers):
pares = []
impares = []
if item % 2 == 0:
# Es par
pares.append(item)
else:
# Es impar
impares.append(item)
72/87
Fundamentos de Python
73/87
Fundamentos de Python
def banner():
print('-'*20)
print('*'*20)
print('-'*20)
def programa_principal():
banner()
banner()
programa_principal()
74/87
Fundamentos de Python
Finalmente, una vez visto cómo se pasan uno o más parámetros de entrada y cómo se devuelve uno o más
parámetros de salida, es importante hablar del bloque main.
Por lo tanto, es importante definir en primera instancia todas las funciones necesarias para la ejecución del
programa y, en último lugar, el bloque main, que se define como:
if __name__ == '__main__':
# Llamada a funciones
Diseñar e implementar un programa en el que el usuario introduzca frases hasta que teclee
“basta”, estas frases las almacenaremos en una lista, posteriormente, iremos almacenando en
una nueva lista todas las frases que contengan la letra “a”. Finalmente, desde el cuerpo principal
del programa, mostraremos estas frases por pantalla.
75/87
Fundamentos de Python
76/87
Fundamentos de Python
77/87
Fundamentos de Python
78/87
Fundamentos de Python
def get_phrases():
"""
input: None
output: list[]
"""
frases = []
respuesta = input()
frases.append(respuesta)
respuesta = input()
return frases
def filter_phrases(lista_frases):
"""
79/87
Fundamentos de Python
input: list
output: list
"""
# Definimos una nueva lista para almacenar todas las frases con
# la letra a
frases_con_a = []
if 'a' in item:
frases_con_a.append(item)
else:
# No hacemos nada
pass
return frases_con_a
def show_filtered_phrases(frases_filtradas):
"""
frases filtradas.
input: list
output: None
"""
80/87
Fundamentos de Python
# No return
if __name__ == '__main__':
todas_las_frases = get_phrases()
frases_clean = filter_phrases(lista_frases=todas_las_frases)
show_filtered_phrases(frases_filtradas=frases_clean)
IX. Resumen
81/87
Fundamentos de Python
Por otro lado, se ha estudio uno de los aspectos más importantes de Python y que le han
otorgado gran popularidad entre los científicos de datos: las estructuras de datos. Además,
hemos visto las principales funcionalidades de cada una de ellas.
Finalmente, hemos aprendido cómo modularizar programas a través de funciones mediante
la escritura de parámetros de entrada y la devolución de parámetros de salida.
82/87
Fundamentos de Python
Ejercicios
Caso práctico
Ejercicio 1
Escribir una función que reciba una secuencia de números (puede ser lista o tupla y los números
pueden ser enteros o decimales) y devuelva la cantidad de números, el valor máximo, el mínimo y la
media.
Solución: EJERCICIO_1_SOLUCION.ipynb
Ejercicio 2
Escribir un programa que, partiendo de las dos siguientes listas con nombres, borre de la lista uno los
nombres de la lista dos.
Solución: EJERCICIO_2_SOLUCION.ipynb
Ejercicio 3
precios = {
83/87
Fundamentos de Python
Modificar cualquier precio inferior a 50, por el valor 50 y, finalmente, devolver el diccionario de datos
actualizado por cada nombre de empresa.
Solución: EJERCICIO_3_SOLUCION.ipynb
84/87
Fundamentos de Python
Recursos
Bibliografía
Explorando la información con Python 3 :
Severance, C. Python para todos. Explorando la información con Python 3: 2016 [En línea] URL disponible
en: http://do1.dr-chuck.com/pythonlearn/ES_es/pythonlearn.pdf
Página web Anaconda :
Barba, L. et al. Teaching and learning with Jupyter: 2019. [En línea] URL disponible en: https://jupyter4edu.git
hub.io/jupyter-edu-book/index.html
Tutorial Python online :
Tutorial sobre Jupyter Notebook. [En línea] URL disponible en: https://jupyter-notebook.readthedocs.io/en/sta
ble/notebook.html
Glosario.
Anaconda: Distribución open source dedicada a lenguajes de programación científica como python y r.
Para simplificar la gestión de paquetes y versiones, todo se realiza desde el sistema de gestión de
paquetes conda.
Bucle for: Herramienta de control dedicada a procesar información de manera iterativa. Un bucle for toma
como punto de inicio y de parada un número entero. Durante cada secuencia en un bucle for, se realiza la
misma acción.
Bucle while: Herramienta de control en forma de bucle que sirve para realizar constantemente (de forma
iterativa) la misma acción hasta que se cumpla una expresión booleana.
Campo clave: Elemento único de los diccionarios de datos. Se trata del identificador único para cada
valor.
85/87
Fundamentos de Python
Campo valor: Elemento único de los diccionarios de datos. Se trata del valor que toma cada posición de
un diccionario. Cualquier campo valor viene precedido por un campo clave.
Celda o chunk: Fragmento de código que puede ser ejecutado por separado. De esta manera se puede
dividir el código de un notebook.
Compilar un programa: Procesar todo el código fuente para que este sea entendible por una máquina.
Una vez realizado el proceso, el programa puede ejecutarse tantas veces como sea necesario en un tiempo
menor que un lenguaje de programación interpretado.
Condicional if-else: Herramienta de control estructurada con base en una expresión booleana en la que si
(if) la condición se cumple, se realiza una parte del código o una acción, y si no (else) se cumple, se realiza
otra acción.
Diccionario de datos: Estructura de datos en la cual los datos están distribuidos entre llaves en forma de
clave, valor.
Entrada de parámetros: Parámetros que son necesarios para el funcionamiento de una variable que serán
tratados dentro del cuerpo de la función.
Estructura de datos: Elementos sobre los que se pueden almacenar variables para su posterior
tratamiento. En python se distinguen tuplas, listas y diccionarios de datos.
Flujo de control: Conjunto de herramientas que ayudan a diseñar el orden de un programa. Se pueden
definir ciertas acciones a través de expresiones booleanas o procesos iterativos.
Función: Bloque de código que se ejecuta únicamente cuando es llamado dentro de un programa. Una
función puede no recibir ningún parámetro o recibir de uno a n parámetros. Una función puede no devolver
ningún parámetro de salida o devolver de uno a n parámetros de salida.
Índice: Característica principal de las listas y cadenas de texto. Un índice almacena cada valor de una lista
o cada caracter de una cadena de texto. Comienza en la posición cero hasta la longitud de la lista o cadena.
De esta manera, se puede acceder a una posición específica del índice, lo que se conoce como indexar.
Intérprete: Se encarga de procesar un programa escrito en código fuente entendible por el intérprete, es
decir, cualquier programa de Python se interpreta a través del intérprete de Python.
Jupyter Notebook: Entorno de desarrollo software para python, r, julia y más de 100 lenguajes de
programación. Se caracteriza por ser un entorno de desarrollo interactivo que permite, desde un navegador
web, documentar un programa, escribir código fuente y comentarios y guardar, incluso, los resultados o
notebooks o cuadernos.
Kernel: En jupyter notebook, un kernel es un programa responsable de manejar las diferentes solicitudes de
ejecución de código y depuración de código.
Lenguaje interpretado: Lenguaje de programación cuyo código no necesita ser preprocesado a través de
un compilador, es decir> toda la ejecución del código se realiza en tiempo real a través del intérprete.
Librería: Conjunto de funciones para un lenguaje de programación empaquetadas en una única solución.
86/87
Fundamentos de Python
Lista: Estructura de datos en la que los elementos están encerrados entre corchetes y separados por
comas. Pueden alterarse los valores de cada una de las posiciones de una lista. A cada una de estas
posiciones se le denomina índice.
Multiplataforma: Aplicación o programa software que puede ser utilizado en diferentes sistemas
operativos.
Operador: Funciones predefinidas sobre las que podemos alterar el valor almacenado en una variable. Los
operadores nos permiten aplicar funciones matemáticas, comparativas y booleanas sobre una variable.
Python: Lenguaje de programación orientado a objetos. Se puede trabajar con estructuras de datos de alto
nivel y una sintaxis elegante y simple.
Salida de parámetros: Conjunto de variables creadas dentro de una función, que deben ser almacenadas
a través de una nueva variable fuera de la función al finalizar su ejecución.
Tipado dinámico: Un lenguaje de programación posee tipado dinámico si una variable puede tomar
valores de diferente tipo como, por ejemplo, que inicialmente se haya creado como tipo entero y,
posteriormente, pueda tomar valor numérico en coma flotante (decimal).
Tupla: Estructura de datos que se caracteriza por tener todos sus valores encerrados entre paréntesis y
separados por comas. No es mutable, es decir, sus valores no se pueden cambiar.
Variable: Elemento en el que guardamos un valor para su posterior procesamiento. Una variable puede ser
modificada.
87/87