¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Scripting Python en Linux
  3. Los tipos de datos en Python
Extrait - Scripting Python en Linux Desarrolle sus herramientas de sistema
Extractos del libro
Scripting Python en Linux Desarrolle sus herramientas de sistema Volver a la página de compra del libro

Los tipos de datos en Python

Introducción

Después de algunas nociones básicas y la estructura sintáctica de las instrucciones de Python, es una buena idea estudiar la materia prima que manejan, es decir, los datos y, más particularmente, los tipos de datos.

Con Python, tiene que saber que todo son objetos, en el sentido informático del término, incluidos los tipos de datos.

Todo esto se explica en profundidad en el capítulo El lado objeto de Python, pero debe aceptar el hecho de que los números, las cadenas, las funciones, etc. todo, es un objeto.

Estas explicaciones se dan para que no se sorprenda con ciertas notaciones típicas de objetos, como <variable.función()> o quizás <objeto.método()>.

Ejemplo

   "Python".upper()  
   pajar.find(aguja)  
   mucho.count('u') 

En estos objectos que se pueden manejar mediante el lenguaje Python, hay tipos de datos predefinidos integrados en el intérprete y utilizables inmediatamente.

Hasta que pueda crear sus propios objectos y tipos de datos, aquí hay una descripción de los tipos de datos más comunes:

  • booleanos

  • numéricos

  • alfanuméricos

  • contenedores o secuenciales

Los booleanos

En las primeras versiones de Python, el tipo booleano no existía y solo usábamos 0 para False (Falso) y 1 para True (Verdadero).

Y funcionaba bien. Pero, ciertamente, para que el lenguaje sea más profesional, se ha añadido el tipo booleano.

Este tipo booleano contiene dos constantes: True (Verdadero) y False (Falso).

De hecho, se trata de un entero disfrazado porque es posible hacer:

>>> True + 1  
2 

Cualquier objeto se puede comparar con un valor booleano y casi todo se considera Verdadero, excepto:

  • las constantes False y None

  • el valor 0

  • la cadena de caracteres vacía (’’)

  • listas de tuplas y otros contenedores vacíos ([] {} () ...)

Usado comúnmente en la búsqueda de la verdad, el tipo booleano está asociado con tres operadores y ocho formas de comparación.

1. Los operadores booleanos

Los operadores booleanos clásicos son or, and, y not.

Empezamos por el operador más sencillo: not. Devuelve un booleano.

not X devuelve False si x es Verdadero. De lo contrario devuelve True.

Por otro lado, tenga cuidado con los operadores and y or: estos no devuelven sistemáticamente un booleano.

Operaciones

Resultados

X or Y

Si X es falso, devuelve Y, de lo contrario, devuelve X

X and Y

Si X es falso, devuelve X, de lo contrario, devuelve Y

Aquí está la tabla cruzada de resultados para X or Y.

5 y 8 son números enteros tomados al azar. El objetivo es ilustrar con cualquier valor numérico.

X OR Y

Y = True

Y = False

Y = 8

Y = 0

Y = ()

Y = []

Y = {}

X = True

True

True

True

True

True

True

True

X = False

True

False

8

0

()

[]

{}

X = 5

5

5

5

5

5

5

5

X = 0

True

False

8

0

()

[]

{}

X = ()

True

False

8

0

()

[]

{}

X = []

True

False

8

0

()

[]

{}

X = {}

True

False

8

0

()

[]

{}

Y aquí está la tabla para el operador and:

X AND Y

Y = True

Y = False

Y = 8

Y = 0

Y = ()

Y = []

Y = {}

X = True

True

False

8

0

()

[]

{}

X = False

False

False

False

False

False

False

False

X = 5

True

False

8

0

()

[]

{}

X = 0

0

0

0

0

0

0

0

X = ()

()

()

()

()

()

()

()

X = []

[]

[]

[]

[]

[]

[]

[]

X = {}

{}

{}

{}

{}

{}

{}

{}

En el uso actual, con las declaraciones if o while, esto no cambia mucho.

Pero es mejor saber que la verdad no siempre es lo que espera...

Los numéricos

Hay tres familias principales de datos numéricos: enteros, flotantes y complejos.

Vamos a decirlo claramente, el uso de números complejos va mucho más allá del alcance de este libro.

Tenga confianza en este punto, porque incluso el artículo de Wikipedia sobre el tema, es de difícil acceso desde los primeros párrafos.

Si lo necesita y sabe cómo usarlo, buenas noticias: están implementado de serie en el lenguaje Python.

Para los demás, seamos razonables y pasemos a conjuntos más accesibles, como los números enteros y flotantes.

1. Los números enteros

¿Qué decir sobre los números enteros en Python? Tienen una precisión ilimitada, desde la versión 3, ya no hay enteros cortos y largos, solo enteros.

Sin embargo, cuando miramos un poco más, encontramos en el módulo ’sys’ (un módulo cercano al sistema) un límite pero que en realidad no lo es.

El módulo ’sys’ permite acceder a las variables del sistema mantenidas por el intérprete.

En este módulo hay un valor llamado maxsize; para obtenerlo, necesitamos importar el módulo ’sys’ y mostrar el valor:

>>> import sys  
>>> print(sys.maxsize)  
9223372036854775807 

Pero esto no es un límite, porque es posible hacer lo siguiente:

>>> maximum = sys.maxsize  
>>> print( maximum + 1)  
9223372036854775808 

Incluso con Python, cuando se superan los límites, no hay límite. Sin embargo, todavía hay una explicación técnica.

Este número maxsize se corresponde con el número entero máximo para el formato de almacenamiento predeterminado del lenguaje Python, pero si la necesidad es mayor, no hay problema. Por otro lado, las operaciones con números enteros serán un poco más largas.

A saber: realizar...

Los alfanuméricos

Después de los cálculos, el texto. Este es el momento de estudiar las cadenas de caracteres en Python.

Se trata del tipo "string", pero preferimos el nombre "cadena de caracteres", por la sencilla razón de que la imagen de los eslabones de una cadena se asemeja a este tipo de datos.

A diferencia de los datos numéricos, que son tipos de datos compuestos por un solo elemento, el tipo "string" es un tipo de datos secuenciales (de ahí la imagen de los eslabones de una cadena).

El lenguaje le permite usar una cadena como un solo objeto, la cadena como un todo, pero también acceder a cada elemento (los caracteres) de este objeto.

Nota: el tamaño de una cadena de caracteres solo tiene un límite respecto a la memoria física que se puede asignar (para probar en una máquina sin memoria swap de intercambio, si no desea bloquear su servidor).

La creación de una cadena de caracteres es simple. Este tipo de datos solo deben estar delimitados por una comilla simple ’ o una comilla doble " e incluso es posible utilizar una comilla doble triple """.

Ejemplo

a = "hola mundo" 

El uso de comillas dobles o simples no importa, excepto cuando se trata de mezclar los dos.

a = "aquí hay un caso típico de uso de comillas dobles"  
#                          ^  
# -------------------------|  
  
a = ' Le dije "Cuidado con las comillas dobles" '  
#                   ^                            ^  
# ------------------|----------------------------| 

Las comillas triples le permiten introducir texto en varias líneas, lo que puede ser muy práctico.

a= """  
¡Hola al mundo!  
============  
""" 

1. Las operaciones aplicables a las cadenas de caracteres

Algunas operaciones son aplicables a las cadenas de caracteres.

 "Hola" + "mundo" 
"Holamundo" 

Concatenación

"_O_" * 3 
"=" * 5 
"_O__O__O_" 
"=====" 

Repetición

"0123456789"[5] 
"ABCDEF"[3] 
"0123456789"[0] ...

Los contenedores o secuenciales

Puede que empiece a apreciar este lenguaje, pero tenga cuidado; una vez que pruebe lo que está por venir, lo adoptará.

El tipo de datos alfanuméricos da una pequeña muestra de lo que puede hacer con las listas, que son un tipo de datos fundamental en Python.

1. Las listas

Este tipo tiene un nombre adecuado, porque es un objeto que puede contener otros, con el único límite del tamaño de la memoria.

Como es costumbre, la sintaxis es muy sencilla, excepto por que en el caso de las listas, puede usar un atajo o la creación de un objeto "list".

Ambas sintaxis son importantes.

El corchete doble se usa para crear una lista vacía o para inicializarla durante la asignación.

Ejemplo

>>> a = []        # Lista vacía 
>>> b = [1,2,3]   # pequeña lista de 3 enteros  
>>> a  
[]  
>>> b  
[1, 2, 3] 

Pero en una lista, es posible almacenar todos los tipos de datos y objectos que Python conoce.

Ejemplo (con las variables inicializadas en el ejemplo anterior)

>>> c = [ "a", 1.0, b , 42 ]  
>>> c  
['a', 1.0, [1, 2, 3], 42] 

En el ejemplo anterior, almacenamos en la lista ’c’ una cadena de caracteres, un número en coma flotante, otra lista y un número entero.

El interés es poder recorrer todo esto.

>>> for element in c:  
...   print(" => ", element)  
...  
=>  a  
=>  1.0  
=>  [1, 2, 3]  
=>  42 

La otra sintaxis es igualmente importante, aunque se adelanta a un capítulo que veremos más adelante sobre programación orientada a objetos (POO).

También es posible utilizar la siguiente sintaxis:

>>> a = list()        # creación de una instancia de lista  
>>> a  
[] 

Con una lista como argumento, esto permite copiar la lista.

>>> d = list(c)  
>>> d  
['a', 1.0, [1, 2, 3], 1912] 

Pero cuidado, d y c son dos listas diferentes, mientras que si escribimos:

>>> e = d  
>>> e  
['a', 1.0, [1, 2, 3], 1912]  
>>> d  
['a', 1.0...

Otros tipos de datos

En el lenguaje Python existen otros tipos de datos, como vistas de diccionarios, por ejemplo.

También están los slices, objetos diseñados para dividir listas y otras secuencias, bytes y bytearray, que son clases diseñadas para manejar bytes.

El tipo de bytes es importante porque, como se verá más adelante, permite manejar archivos en modo binario.

Es un poco como un número entero, pero con métodos adicionales.

El problema es que, hoy en día, solo manejamos muy raramente bytes. El tipo Texto administra archivos automáticamente y gestiona correctamente la codificación en utf-8, que incluye ascii.

Un dato más: aquí está la jerarquía de los tipos de datos en Python.

None

Sí, es un tipo de datos

Not Implemented

Este también

Ellipse

Para el manejo de ’…’ o puntos suspensivos (Ellipsis). Es un objeto para representar los bucles recursivos.

numbers

Enteros/Flotantes, etc.

Secuencias

 

    mutables

Listas

    inmutables

Tuplas

Conjuntos

 

    Conjuntos

Set

    Conjuntos fijos

Frozenset

Tabla de correspondencia

 

    Diccionario

 

Tipos que se pueden llamar

Callable en inglés, las funciones por ejemplo

Módulos

Pueden ser llamados mediante la instrucción ’import’

Objetos declarados por el desarrollador

Sus futuros objetos están...

Resumen

En este capítulo se han estudiado los tipos de datos que Python conoce, así como los operadores y los métodos aplicables a ellos.

A partir de estos tipos básicos, es posible construir estructuras de datos complejas sin otro límite que su imaginación.