Fastbook 01
Programación en Python
Introducción a Python
Edix Educación
01. Introducción a Python
¡Bienvenidos a Programación en Python! En este primer fastbook vamos a
introducirnos en el mundo de Python. Comenzaremos con sus principales
características y las ventajas que nos proporciona como lenguaje, y aprenderemos a
trabajar en Jupyter Notebook, un entorno interactivo de desarrollo. Posteriormente,
nos adentraremos en Python explicando qué son los módulos y cómo utilizarlos,
veremos sus tipos b ásicos de datos y cómo operar con ellos.
Autor: Jesús Aguirre Pemán
¿Qué es Python?
Anaconda y los entornos de trabajo
Jupyter Notebook
Características de Python
Módulos
Tipos de datos
Operaciones de comparación
Conclusiones
Test nal
Lección 1 de 9
¿Qué es Python?
Edix Educación
Breve historia de Python
Python es un lenguaje de programación creado por el neerlandés Guido van Rossum a finales de
la década de 1980 y publicado por primera vez en 1991.
Fue concebido como un lenguaje de programación sencillo de
leer y de utilizar, y con un enfoque multipropósito.
Desde su publicación, se han lanzado las versiones 1.0 (1994), 2.0 (2000) y 3.0 (2008),
además, lógicamente, de otras intermedias. Es importante tener en cuenta estas tres versiones
principales porque presentan elementos incompatibles entre sí (por ejemplo, la sintaxis de la
función print).
Desde 2001, la Python Software Foundation (PSF), una organización sin ánimo de lucro, se
encarga de la propiedad intelectual del lenguaje. Su nombre, a pesar de las serpientes de su logo,
procede de los humoristas británicos Monty Python (los genios detrás de La vida de Brian). De
hecho, es muy frecuente encontrar en la documentación oficial de Python ejemplos basados en
sketches suyos (por ejemplo, spam).
¿Por qué Python?
Os estaréis preguntando, ¿para qué sirve aprender Python y R conjuntamente? ¿Qué puede
aportar Python que no se pueda conseguir con R?
Un primer punto a favor de Python es su enorme y aún creciente popularidad: según el
índice PYPL de popularidad de lenguajes de programación, Python ocupa el primer puesto
(y a fecha de enero de 2021, casi dobla en puntos al segundo, Java).
¿Y qué es lo que hace a Python un lenguaje tan popular? Sobre todo, su versatilidad. Python
se puede utilizar para desarrollar proyectos de data science (que será nuestro objetivo a lo
largo de esta asignatura), para programación orientada a objetos (también lo veremos al
final de la asignatura), para desarrollo web (utilizando Flask o Django), para
automatización de tareas y un largo etcétera de propósitos.
Otro de los puntos fuertes de Python es su uso generalizado en entornos de producción.
Mientras que para desarrollar pequeños proyectos analíticos es frecuente optar
indistintamente por R o por Python sin perder apenas funcionalidades en esta decisión de
lenguaje; a la hora de integrar esta analítica en un sistema de producción, es más habitual el
uso de Python, ya que está más soportado para este tipo de tareas. Por ejemplo, si queremos
utilizar el servicio de computación en nube de Google Cloud Run, que nos permite levantar
varios contenedores que ejecuten código en paralelo, tenemos la opción de utilizar código
Python, pero no podremos alimentar este servicio con código R.
Al igual que R, Python no solo tiene una gran cantidad de funciones en
su librería estándar, sino que dispone de miles de librerías
adicionales para multitud de ámbitos diferentes, gracias a su facilidad
para crearlas y la gran comunidad de desarrolladores de la que dispone.
A lo largo de esta asignatura exploraremos algunas de las más
importantes, como Numpy o Pandas.
Lección 2 de 9
Anaconda y los entornos de trabajo
Edix Educación
Antes de seguir aprendiendo sobre Python, vamos a detenernos un momento para instalarlo y
configurar el entorno en el que trabajaremos. Para ello, vamos a utilizar Anaconda.
Anaconda es una distribución de Python que incluye, además del propio
Python, otras librerías y programas (como por ejemplo, Jupyter
Notebook o Spyder, que utilizaremos en el curso). Es una forma sencilla
de instalar y con gurar un entorno de trabajo en Python.
Podéis descargar Anaconda desde este link.
Una vez descargado, ejecutáis el instalador y seguís sus pasos. Os saldrá la siguiente ventana,
preguntándoos si queréis añadir Anaconda al PATH.
Con la opción recomendada, deberéis usar la consola de Anaconda (Anaconda prompt) para
realizar instrucciones conda (luego veremos ejemplos). Si, por el contrario, queréis realizar
estos comandos sobre la consola por defecto de vuestro sistema operativo, deberéis marcar
la opción correspondiente.
Desde Anaconda Navigator podemos crear y configurar entornos virtuales de manera sencilla.
Un entorno es un directorio que contiene los paquetes conda que se
hayan instalado. Esto puede ser útil si trabajamos con versiones
distintas de Python, o si queremos crear un ecosistema para un
proyecto donde jemos las versiones y no se actualicen.
Podemos crear un nuevo entorno simplemente haciendo clic en el botón de Create.
Introduciremos el nombre y seleccionaremos la versión de Python que queramos usar en ese
entorno. Para finalizar, haremos clic en Create.
Ahora ya podremos instalar paquetes en nuestro nuevo entorno.
Para cambiar de entorno, simplemente haremos doble clic sobre otro que hayamos definido
(o el entorno base o por defecto).
Si preferís hacer estos pasos (todos o alguno de ellos) con la consola de Anaconda (Anaconda
Prompt), lo haríamos de la siguiente forma.
1 En primer lugar, creamos el entorno con la versión 3.7 de Python:
2 Lo activamos:
3 Podemos instalar librerías con:
4 Y para desactivarlo, utilizaremos el siguiente comando:
Lección 3 de 9
Jupyter Notebook
Edix Educación
Según un reciente artículo en KDNuggets (Here are the Most Popular Python IDEs/Editor),
Jupyter seguía siendo el entorno de desarrollo más utilizado en Python en 2020. A diferencia de
R, donde los desarrolladores se concentran más en RStudio, en Python hay una mayor variedad
de entornos disponibles.
La mayor ventaja de Jupyter es lo interactivo que resulta trabajar en un formato de
notebook, ya que mientras desarrollamos el código podemos ir viendo el resultado
que produce. Además, si queremos montar un informe, la exportación en formato
HTML es inmediata.
La desventaja de utilizar Jupyter puede darse cuando tengamos que editar código que
ya está desarrollado, pero, en estos casos, podemos combinar Jupyter con otros
editores como Spyder o Pycharm, en los que gestionaremos el código que ya haya
sido desarrollado y esté en una fase más estable.
Extensiones de Jupyter Notebook
Una de las funcionalidades más útiles de Jupyter es el conjunto de extensiones con el que
cuenta.
Para instalarlas, utilizaremos el siguiente comando de pip, el sistema de administración de
paquetes de Python. Este sistema busca los paquetes en el repositorio de Python, PyPI.
En el siguiente vídeo podréis ver cómo es la interfaz de
Jupyter Notebook, además de cómo crear un notebook y
comenzar a trabajar en él.
Programación en Python, fb. 01: Crear un notebook en Jup…
Jup…
Y en este segundo vídeo veréis cómo utilizar atajos de
teclado y extensiones para aumentar la productividad.
Programación en Python, fb. 01: Crear un notebook en Jup…
Jup…
Otros entornos de desarrollo
Además de Jupyter, existen otros entornos populares para Python como Spyder o Pycharm.
Ambos son ejemplos de entornos de desarrollo integrado (IDE, integrated development
environment), donde, además del editor de código, tenemos herramientas como depuración y
autocompletado, que en Jupyter están algo más limitadas.
Spyder
–
Spyder es tal vez el más parecido a RStudio en cuanto a la disposición de los elementos de la
interfaz (podemos dividirla en los cuadros de código, consola, variables y documentación que se
suele tener en RStudio). Además, tenemos highlight de la sintaxis de Python, autocompletado del
código, debug (mediante pdb) e incluso muestra errores (por ejemplo, uso de variables que no se
han definido). Además, ya lo tenéis instalado con Anaconda.
Pycharm
–
Pycharm es un IDE desarrollado por JetBrains (los creadores de IntelliJ), con lo que tal vez os
sintáis más cómodos con él si habéis programado en Java o Kotlin (el lenguaje para Android).
Tiene unas características muy similares a Spyder, tal vez más completo (tiene soporte para Git,
entre otras cosas) pero algo menos simple de manejar.
Como comentábamos anteriormente, es frecuente combinar el entorno de Jupyter con Spyder o
Pycharm para aprovechar las ventajas de ambos enfoques. Por ejemplo, usando los Notebooks
de Jupyter para explorar; y gestionando el código y realizando pequeños cambios sobre él con
Spyder.
Lección 4 de 9
Características de Python
Edix Educación
A continuación, veamos una serie de características básicas de Python como lenguaje. La mayor
parte de ellas son compartidas con R, pero aprovecharemos esta introducción para recordarlas.
Imprimir por pantalla
Lo primero que se hace en cualquier lenguaje es imprimir Hola Mundo por pantalla, y aquí no
vamos a ser menos. Para imprimir, se utiliza la función print, indicando entre paréntesis el
objeto que se quiera imprimir.
Además, en Jupyter podéis imprimir un objeto simplemente escribiéndolo al final de una celda
de código, sin necesidad de usar la función print. En este caso, veréis cómo aparece en un cuadro
llamado output, o salida de la celda.
La función print imprime un salto de línea al final de los objetos, con lo que si la llamamos dos
veces seguidas, obtendremos dos líneas:
Para evitar esto, podemos especificar que termine la línea con un espacio, como en la imagen.
Ahora, tras imprimir Hola hemos puesto un espacio, con lo que el siguiente print (Mundo)
aparece en la misma línea.
Si ves código Python en el que la función print se usa sin
paréntesis, significa que estás ante código anterior a la
versión 3. ¡Es la forma más fácil de reconocerlo!
Palabras reservadas
Todos los lenguajes cuentan con una serie de palabras reservadas: palabras que no podremos
utilizar para nombrar nuestras variables o funciones. Muchas de ellas son comunes a la mayoría
de los lenguajes de programación.
En la siguiente tabla podéis ver qué palabras están reservadas en Python:
Palabras reservadas en Python
False class from or
None continue global pass
True def if raise
and del import return
as elif in try
assert else is while
async except lambda with
await finally nonlocal yield
break for not
Como veremos posteriormente, las mayúsculas y minúsculas sí que importan en Python: las
tres primeras comienzan por mayúscula, y el resto son todas en minúsculas. Para consultar la
tabla, podéis introducir el comando help(“keywords”).
Veremos la mayoría de las palabras reservadas a lo largo de la
asignatura.
Guía de estilo
Python tiene una serie de guías de estilo llamadas Python enhancement proposals o PEP. La más
conocida y utilizada de ellas es el PEP-8, o la guía de estilo para el código Python. En ella
aparecen una serie de recomendaciones de estilo y ejemplos de buenas y malas prácticas en
códigos Python.
A pesar de que veremos parte de su contenido a lo largo de la
asignatura, os recomiendo que le echéis un vistazo,
especialmente tras finalizar los tres primeros fastbooks,
cuando ya estaréis más familiarizados con la mayoría de los
conceptos que aparecen en ella.
Tipado dinámico
Existen dos formas diferentes de tipado: estático y dinámico:
En un lenguaje de tipado estático (como Java o C), debemos definir el tipo de las
variables al declararlas, y este tipo permanecerá inalterable.
Python es un lenguaje de tipado dinámico, es decir, no es necesario definir el tipo
de la variable, y nos basta con asignarle otro valor para que su tipo cambie.
Comentarios
Al igual que en R, podemos incluir comentarios (texto que proporciona indicaciones o ayuda a
entender el código) mediante el uso de la almohadilla: #. Podemos insertarlos tanto al comienzo
como en mitad de una línea, y todo lo que se encuentre a la derecha de este código quedará como
texto comentado y, por lo tanto, no será ejecutado por el intérprete de Python.
Saltos de línea
En Python podemos realizar saltos de línea utilizando la barra invertida: \. Esto nos será útil
cuando tengamos líneas largas que queramos dividir para aumentar la legibilidad del código.
No obstante, la recomendación de la guía de estilo de Python es utilizar pares sintácticos
(paréntesis, llaves y corchetes). De esta forma, podríamos escribir la sentencia anterior así:
La razón más esgrimida para evitar la barra invertida es que
puede olvidarse fácilmente, así que deberéis ser cuidadosos
cuando la utilicéis.
Indentación
Python utiliza la indentación (o sangrado) para estructurar el código. Este sangrado adicional se
realiza mediante la inclusión de un tabulador o (habitualmente cuatro) espacios. Se recomienda
limitarse a una de estas dos formas y no mezclarlas. Todo el código debe estar en el mismo nivel
de indentación hasta que se llegue a una instrucción donde se indica el cambio de nivel de
indentación mediante dos puntos (:). Al acabar esos bloques, volveremos al nivel anterior.
Algunos ejemplos de instrucciones que cambian este nivel de indentación son definiciones de
funciones, condicionales o bucles.
Veamos un ejemplo con una instrucción condicional.
Esto supone una ligera diferencia respecto a R, donde se utilizan corchetes.
Ejemplo de instrucción condicional en R.
Aunque pueda parecer lo mismo, ya que en R se suele utilizar una indentación estética muy
similar, lo cierto es que en R podríamos escribir el código de la instrucción condicional en una
sola línea, manteniendo intacta su funcionalidad, mientras que en Python la indentación es
totalmente necesaria para el correcto funcionamiento del código.
Uso de punto y coma al nal de las líneas
Al igual que R, Python permite el uso de punto y coma para acabar las líneas, permitiendo así
encadenar varias sentencias a lo largo de una misma línea. Aunque es posible, no es
recomendable, ya que dificulta la lectura del código.
Centrado en objetos
Python tiene una fuerte orientación a objetos, lo que hace que prácticamente todos los
elementos que utilicemos sean objetos, con su tipo, sus datos y sus funciones (o métodos)
asociados a ellos.
En el último fastbook de la asignatura aprenderemos más
sobre la orientación a objetos y cómo definir nuestras
propias clases.
Lección 5 de 9
Módulos
Edix Educación
Los módulos son archivos de Python (extensión .py) que contienen código, entre el que se
pueden encontrar definiciones de variables o funciones. Si importamos estos módulos o
archivos, podremos utilizar dichas funciones desde otro lugar.
Por ejemplo, creemos un módulo modulo.py, donde definiremos una función.
Como veis en la imagen, a su vez nuestro módulo importa otro módulo: la librería numpy, que
estudiaremos a fondo en el fastbook 4. Es más, además de importarlo le asigna un alias, para
que cada vez que utilice funciones o variables de ese módulo solo haga falta escribir np en
lugar de numpy. Vemos que para utilizar elementos del módulo utilizamos la expresión
modulo.elemento.
Podemos importarlo desde otro archivo, ya sea un .py o un notebook. En particular, si
utilizamos Jupyter Notebook, podemos hacer uso de la extensión autoreload para recargar
todos los ficheros que importemos de forma periódica. Así, cuando realicemos cambios en
sus funciones, nos aparecerán actualizadas en el notebook sin tener que repetir el import, lo
cual es muy útil si estamos desarrollando código de forma simultánea en varios ficheros.
También podemos importar funciones concretas de un módulo, para lo que utilizaremos la
palabra reservada from. De esta forma, no necesitaremos usar la fórmula modulo.elemento
para utilizar variables o funciones del módulo.
Si queremos importar todo lo que se encuentra en un módulo utilizaremos *. No es muy
recomendable a menos que sepamos lo que se encuentra en el módulo, ya que podemos tener
conflictos de nombres.
Lección 6 de 9
Tipos de datos
Edix Educación
Variable
Una variable es un contenedor que almacena valores.
Realmente, ese contenedor es una dirección física de la memoria del ordenador que se reserva
para guardar el valor. Las variables se identifican mediante un nombre o identificador.
Los identificadores deben comenzar por una letra o guion bajo, y podemos incluir letras,
números y guiones bajos en ellos. Se recomienda utilizar identificadores que guarden relación
con el contenido de la variable para aumentar la legibilidad del código (por ejemplo, si creamos
una variable que almacene el número de meses de inversión publicitaria en TV, es recomendable
llamarla meses_inversion_TV, en lugar de inv, o n).
Python proporciona los tipos básicos de variables que tenemos en la mayoría de los lenguajes de
programación.
Para asignar un dato a una variable, utilizaremos el operador de asignación =. Veamos un
sencillo ejemplo:
Es muy importante saber que la asignación produce una referencia al objeto que estamos
asignando. En el caso anterior, meses_inversion_TV tiene una referencia al número 8. Al ser un
escalar, nunca cambiará de valor, y no tendremos ningún problema con la asignación. No
obstante, en fastbooks posteriores veremos qué sucede si asignamos a una variable un objeto
mutable que cambie posteriormente su valor.
Lógicos
Los datos lógicos, binarios o booleanos (abreviado bool) son de los más
utilizados en programación. Pueden contener dos valores: verdadero o
falso, y para operar con ellos utilizaremos el álgebra de Boole (de ahí
viene su nombre).
Tenemos tres operadores, que ordenados por prioridad descendente son:
Operación Significado Ejemplo Resultado
not x not False True
El contrario de x:
si x es True,
devolverá False; y
viceversa.
Si x e y son True,
devolverá True;
x and y False and True False
de lo contrario,
False.
Si x o y son True,
devolverá True;
x or y False or True True
de lo contrario,
False.
Además, para operaciones con conjuntos o arrays (que veremos más adelante), tenemos
disponibles los operadores elemento a elemento (también llamados bitwise).
Operación Nombre Significado
Para cada elemento, el
contrario de x: si x es
~x Bitwise NOT
True, devolverá False; y
viceversa.
Para cada elemento, si x
e y son True, devolverá
x& y Bitwise AND
True; de lo contrario,
False.
x^y Bitwise XOR Para cada elemento, si x
o y (pero no ambos) son
True, devolverá True; de
lo contrario, False.
Para cada elemento, si x
o y son True, devolverá
x|y Bitwise OR
True; de lo contrario,
False.
Podemos utilizar otros operadores ajenos a la lógica booleana, y veremos cómo Python (al igual
que otros muchos lenguajes) realiza una conversión de tipos (también llamado coerción o
casting) de forma implícita, convirtiendo los valores True en 1, y los False en 0.
Números
Tenemos disponibles de forma nativa los siguientes tipos numéricos:
Enteros, o integer (abreviado como int).
Números de punto flotante, o float. Se corresponden con los números decimales.
Números complejos, o complex.
E incluso existen módulos para números racionales (módulo fractions) o decimales de alta
precisión (módulo decimal).
Normalmente, nos bastará con los dos primeros tipos (integers y floats), sobre los que podremos
aplicar las operaciones clásicas sobre números que vemos en la siguiente tabla.
Operación Significado Ejemplo Resultado
x+y Suma de x e y 2+2 4
x-y Resta de x e y 2-2 0
Multiplicación
x*y 2.5*2.5 6.25
de x e y
x/y División de x e y 8/5 1.6
División entera
x // y 8//5 1
de x e y
Remanente de
x%y 8%5 3
x/y
x ** y x elevado a y 2**3 8
Valor absoluto
abs(x) abs(-5) 5
de x
x convertido a
int(x) int(5.4) 5
entero
x convertido a
float(x) float(3) 3.0
punto flotante
En las operaciones numéricas también se pueden dar castings implícitos para evitar pérdidas de
datos. Por ejemplo, si dividimos un número entero entre otro que no sea divisor suyo, el
resultado no será un número entero, sino un float, como en el ejemplo de la imagen.
Secuencias
En Python tenemos tres tipos básicos de secuencias: lista (list),
tupla (tuple) y rango (range).
Profundizaremos en ellas en fastbooks posteriores, pero es importante introducir algunas
operaciones que se pueden hacer sobre ellas.
Operación Significado Ejemplo Resultado
El elemento x
x in s está en la 3 in [1,2,3] True
secuencia s
El elemento x no
x not in s está en la 5 not in [1,2,3] True
secuencia s
Concatenación
s+t de las secuencias ['a', 'b']+[ 'c'] ['a', 'b', 'c']
xyt
Concatenación n
s*n veces de la ['a', 'b']*2 ['a', 'b', 'a', 'b']
secuencia s
Selecciona el
elemento en la
s[i] (1,2,3,4,5,6)[0] 1
posición i de la
secuencia s
Slice de la
s[i:j] secuencia s: (1,2,3,4,5,6)[0:4] (1,2,3,4)
elementos de i a j
Slice de la
secuencia s: (1,2,3,4,5,6)
s[i:j:k] (1,3)
elementos de i a [0:4:2]
j, de k en k
Longitud de la
len(s) len([1,2,3]) 3
secuencia s
Mínimo de la
min(s) min((1,2,3)) 1
secuencia s
Máximo de la
max(s) max(['a', 'b', 'c']) 'c'
secuencia s
Detengámonos en las operaciones de selección y slice.
Las secuencias están numeradas con un índice entre 0 y N-1, donde N es la longitud de la
secuencia. Es decir, en Python (al igual que en C o Java) se empieza a ‘contar’ desde 0, ¡así
que tened cuidado si estáis acostumbrados a R!
Como veíamos en el cuadro anterior, podemos acceder al elemento i de una secuencia
introduciéndolo entre corchetes.
También podemos obtener un slice o corte de la secuencia indicando, además del primero, el
último elemento. En Python, el índice correspondiente al extremo final no se incluye en el
slice.
Como veis, se incluyen los índices del 0 al 3 sin incluir este último, es decir, 0, 1 y 2. En esas
tres primeras posiciones de la secuencia se encuentran las letras ‘a’, ‘b’ y ‘c’.
Si no incluimos valor final, por defecto se utilizará el tamaño de la secuencia, y este es el
motivo de no incluir el último valor: en nuestro ejemplo, la secuencia tiene cinco, y al
empezar en 0, no existe el índice 5 (sería el sexto elemento). Al no incluirse el extremo final,
evitamos ese problema.
Python permite usar índices negativos, que comienzan en el último elemento y continúan en
orden inverso. Observad que comienzan en -1, ya que el 0 se utiliza en el primer elemento.
Comprobémoslo en el ejemplo.
También podemos seleccionar el paso del slice. Anteriormente, cogíamos elementos de uno
en uno, pero podemos indicar un paso diferente.
En el ejemplo anterior, comenzamos en el índice 2 (el valor 3), hasta el índice 6 (el valor 7,
pero sin incluirlo), y saltando de dos en dos. Por tanto, obtenemos los valores 3 y 5.
Un uso muy frecuente del slicing es dar la vuelta a una secuencia, dejando en blanco los
valores inicial y final, y utilizando un paso de -1.
Texto
En Python tenemos disponibles las cadenas de caracteres, también
llamadas string (abreviado como str). Estas se pueden construir
mediante:
Comillas simples: 'soy un string de comillas simples'.
Comillas dobles: “ahora utilizo comillas dobles”.
Comillas triples (tanto simples como dobles): “““comillas triples dobles”””,
'''comillas triples'''. Estos strings pueden incluir saltos de línea (almacenados como
\n).
Da igual qué tipo de comillas usemos, ya que Python almacenará la información internamente de
la misma forma (y nos la mostrará por pantalla con comillas simples).
1 Selección e indexación
En Python no existe un tipo carácter individual o char (como por ejemplo en C), con lo que cada
elemento individual de un string es otro string (pero de longitud 1). Esto es, los strings son un
tipo particular de secuencias, por lo que podremos utilizar lo aprendido en el apartado anterior.
Veamos cómo acceder a elementos de un string. En primer lugar, definamos un string
básico.
Podremos acceder a elementos del string indicando un índice entre corchetes. ¡Recordad que
se empieza por el índice 0!
También podemos seleccionar de la misma forma fragmentos de un string:
Los strings son inmutables, es decir, no podemos modificar elementos o fragmentos.
2 Operaciones sobre textos
Concatenación
En primer lugar, veamos la operación más utilizada: la concatenación. Podemos concatenar
strings mediante el operador +.
También podemos utilizar f-strings (documentación completa en el PEP-498), que permiten
incluir expresiones dentro del propio string. Para incluir una expresión, la encerraremos
entre llaves. Veamos un ejemplo.
Métodos de los strings
Comentábamos en la introducción a Python que es un lenguaje orientado a objetos, vamos a
ver qué significa realmente esto. Los strings que hemos visto ahora son objetos, y además
del valor (“hola mundo” en el último ejemplo), tienen disponible una serie de métodos o
funciones que se pueden ejecutar sobre ellos mismos (ya hemos visto un par de ejemplos en
el apartado anterior).
Una forma sencilla de ver qué métodos tenemos disponibles es teclear la variable, después un
punto (para acceder a los métodos y atributos del objeto) y pulsar el tabulador. Veremos lo
siguiente:
A continuación podremos desplazarnos con el scroll para seleccionar el método que
queremos. Recordad que, si queréis consultar la documentación de una función, podéis
hacerlo usando un interrogante:
Veremos todos estos métodos en profundidad en fastbooks posteriores, pero a continuación
tenéis los más básicos (manejo de mayúsculas y minúsculas) para que os familiaricéis con el
uso de métodos sobre strings.
Método Significado
Devuelve una cadena donde todas las
upper
letras son mayúsculas
Devuelve una cadena donde todas las
lower
letras son minúsculas
Devuelve una cadena donde la
capitalize
primera letra es mayúscula
Devuelve una cadena donde la
title primera letra de cada palabra es
mayúscula
Por último, podemos convertir objetos compatibles en strings mediante la función str.
None
Para indicar la ausencia de valor, Python de ne el tipo none (NoneType),
cuyo único valor es None. De esta forma, si de nimos una variable con
este valor, indicamos que la variable existe, pero su valor es
desconocido.
Lección 7 de 9
Operaciones de comparación
Edix Educación
Un básico de cualquier lenguaje de programación son las operaciones de comparación entre
variables, que reciben dos objetos y devuelven un resultado binario. Python nos proporciona las
siguientes:
Operador Significado Ejemplo Resultado
< Menor que 3<5 True
Menor o igual
<= 7.8 <= 5 False
que
> Mayor que 'b' > 'a' True
Mayor o igual
>= True >= False True
que
== Igual que 'a' == 'b' False
!= Distinto que 'a' != 'b' True
is Identidad de True is None False
objeto
Identidad de
is not True is not None True
objeto negada
En los ejemplos de la tabla anterior hemos visto cómo hemos aplicado los operadores
indistintamente a bools, ints, floats y strings. Cada uno utiliza su propio orden: los números, el
orden implícito a ellos; los booleanos, el orden numérico resultante del casting a int; y los
strings, el orden lexicográfico (el mismo que se utiliza por ejemplo en un diccionario).
Ya vimos en el caso de los operadores lógicos not, or y and que existe una prioridad (también
llamado precedencia) entre ellos. La siguiente tabla muestra el orden de prioridad descendente
de todos los operadores que hemos visto a lo largo del fastbook.
Operadores Significados
() Expresiones entre paréntesis
Selección, slicing, atributos, llamadas
X[i], X[i:j], x.atributo, x(arg)
a funciones
~ Bitwise NOT
** Exponencial
Multiplicación, división, división
*, /, //, %
entera, módulo
& Bitwise AND
^ Bitwise XOR
| Bitwise OR
+, - Suma, resta
Operadores de comparación Ver tabla anterior
not Negación booleana
and Conjunción booleana
or Disyunción booleana
Los elementos que están en el mismo nivel de precedencia se aplicarán de izquierda a derecha.
No obstante, como veis en el primer nivel de prioridad, podéis utilizar paréntesis para clarificar
el orden.
Por último, aunque las operaciones de comparación que hemos visto son binarias, podemos
encadenar varias de ellas.
El operador is
Vamos a detenernos a explicar el funcionamiento del operador is. El uso principal que le
daremos es comprobar si un objeto es None, pero es interesante conocer qué comprueba
realmente este operador.
Para entender este operador, tenemos que volver al concepto de objeto en Python. Todos los
objetos de Python tienen una identidad, un tipo y un valor. Hasta ahora hemos visto muchos
ejemplos de tipos y valores, pero no de identidades.
La identidad de un objeto nunca cambia una vez que ha sido
creado, por lo que podríamos asemejarlo a la dirección física
del objeto en la memoria.
Precisamente, es el operador is el que comprueba las identidades de dos objetos, y la función
id permite consultar la identidad de un objeto.
En el caso de números o strings, como la asignación es una referencia, siempre tendrán el
mismo id.
Posteriormente veremos estructuras de datos más complejas en las que, aunque sus valores
sean iguales, el id (la dirección donde se almacenan) es distinto. Por tanto, una comparación
con == obtendrá un valor True, pero con is obtendremos False.
Lección 8 de 9
Conclusiones
Edix Educación
En este primer fastbook nos hemos introducido en el mundo de Python. Hemos comenzado por
entender las características del lenguaje, y qué ventajas nos puede proporcionar aprenderlo.
También hemos aprendido cómo manejarnos en Jupyter Notebook para poder crear nuestras
primeras líneas de código Python. Posteriormente hemos introducido los tipos más básicos que
ofrece el lenguaje, y algunas de las operaciones que podemos realizar con ellos.
En el próximo fastbook continuaremos viendo más tipos de datos, profundizaremos en las
funciones y veremos elementos de control de flujo como condicionales y bucles.
Antes de continuar, os recomiendo que repaséis lo que habéis aprendido hasta aquí. Cread un
notebook, y explorad por vuestra cuenta las operaciones entre tipos numéricos, los métodos
sobre strings o las comparaciones de variables.
Lección 9 de 9
Test nal
Edix Educación
Responde a las preguntas para comprobar lo que has aprendido.
Pregunta
01/07
¿Cuál de los siguientes es un entorno de desarrollo integrado o IDE?
Spyder.
Pandas.
Python.
Pregunta
02/07
¿Cuál de los siguientes es un comentario válido en Python?
//Esto es un comentario
@Esto es un comentario
#Esto es un comentario
Pregunta
03/07
¿Es posible realizar secuencialmente las siguientes instrucciones?
No, porque al definir la variable como numérica ya no puede tomar
un valor de texto.
Sí, ya que Python es un lenguaje de tipado dinámico.
Pregunta
04/07
¿Cuál de las siguientes opciones importa el módulo Pandas?
import(pandas)
import pandas
library(pandas)
Pregunta
05/07
¿Cuál es el resultado de 3**2?
9
Pregunta
06/07
¿Es posible realizar las siguientes instrucciones?
Sí, y el valor sería Cadena.
Sí, y el valor sería cCdena.
No.
Pregunta
07/07
¿Cuál es el resultado de la siguiente expresión?
True, porque 2*3/5 es mayor que 0 (el casting a float de True and
False).
False, porque >= tiene más prioridad que and, y True and False es
False.
Respuestas: 1-A, 2-C, 3-B, 4-B, 5-C, 6-C, 7-B
Creamos Digital Workers