Tipo de datos

 

 Tipo de datos


Números enteros


Este tipo de dato se corresponde con números enteros, es decir, sin parte decimal.

El tipo int (del inglés integer, que significa «entero») permite representar números enteros.

Los valores que puede tomar un int son todos los números enteros: ... -3-2-10123, ...

Los números enteros literales se escriben con un signo opcional seguido por una secuencia de dígitos:

1570
+4591
-12

Número Decimal (float)

Este tipo de dato se corresponde con números reales con parte decimal. Cabe destacar que el separador decimal en Python es el punto (.) y no la coma (,).

Caracter (chr)

Este tipo de dato se corresponde con un símbolo tipográfico, es decir, una letra, número, coma, espacio, signo de punutación, etc.

Cadena de Texto (str)

Este tipo de datos se corresponde con una cadena de caracteres.

Booleano (bool)

Este tipo de dato reconoce solamente dos valores: Verdadero (True) y Falso (False). Compatibilidad de tipos de datos.


Tipos numéricos

Python define tres tipos de datos numéricos básicos: enterosnúmeros de punto flotante (simularía el conjunto de los números reales, pero ya veremos que no es así del todo) y los números complejos.

Números enteros

El tipo de los números enteros es int. Este tipo de dato comprende el conjunto de todos los números enteros, pero como dicho conjunto es infinito, en Python el conjunto está limitado realmente por la capacidad de la memoria disponible. No hay un límite de representación impuesto por el lenguaje.

Pero tranquilidad, que para el 99% de los programas que desarrolles tendrás suficiente con el subconjunto que puedes representar.

Un número de tipo int se crea a partir de un literal que represente un número entero o bien como resultado de una expresión o una llamada a una función.

Ejemplos:

>>> a = -1 # a es de tipo int y su valor es -1
>>> b = a + 2 # b es de tipo int y su valor es 1
>>> print(b)
1

También podemos representar los números enteros en formato binariooctal o hexadecimal.

Los números octales se crean anteponiendo 0o a una secuencia de dígitos octales (del 0 al 7).

Para crear un número entero en hexadecimal, hay que anteponer 0x a una secuencia de dígitos en hexadecimal (del 0 al 9 y de la A la F).

En cuanto a los números en binario, se antepone 0b a una secuencia de dígitos en binario (0 y 1).

>>> diez = 10
>>> diez_binario = 0b1010
>>> diez_octal = 0o12
>>> diez_hex = 0xa
>>> print(diez)
10
>>> print(diez_binario)
10
>>> print(diez_octal)
10
>>> print(diez_hex)
10

Números complejos

El último tipo de dato numérico básico que tiene Python es el de los números complejoscomplex.

Los números complejos tienen una parte real y otra imaginaria y cada una de ellas se representa como un float.

Para crear un número complejo, se sigue la siguiente estructura <parte_real>+<parte_imaginaria>j. Y se puede acceder a la parte real e imaginaria a través de los atributos real e imag:

>>> complejo = 1+2j
>>> complejo.real
1.0
>>> complejo.imag
2.0


Aritmética de los tipos numéricos

Con todos los tipos numéricos se pueden aplicar las operaciones de la aritmética: suma, resta, producto, división, …

En Python está permitido realizar una operación aritmética con números de distinto tipo. En este caso, el tipo numérico «más pequeño» se convierte al del tipo «más grande», de manera que el tipo del resultado siempre es el del tipo mayor. Entendemos que el tipo int es menor que el tipo float que a su vez es menor que el tipo complex.

Por tanto, es posible, por ejemplo, sumar un int y un float:

>>> 1 + 2.0
3.0
>>> 2+3j + 5.7
(7.7+3j)

Tipo booleano

En Python la clase que representa los valores booleanos es bool. Esta clase solo se puede instanciar con dos valores/objetos: True para representar verdadero y False para representar falso.

Una particularidad del lenguaje es que cualquier objeto puede ser usado en un contexto donde se requiera comprobar si algo es verdadero o falso. Por tanto, cualquier objeto se puede usar en la condición de un if o un while (son estructuras de control que veremos en tutoriales posteriores) o como operando de una operación booleana.

Por defecto, cualquier objeto es considerado como verdadero con dos excepciones:

  • Que implemente el método __bool__() y este devuelva False.
  • Que impleménte el método __len__() y este devuelva 0.

Además, los siguientes objetos/instancias también son consideradas falsas:

  • None
  • False
  • El valor cero de cualquier tipo numérico: 00.00j, …
  • Secuencias y colecciones vacías (veremos estos tipos en otros tutoriales): ''()[]{}set()range(0)

Tipo cadena de caracteres

Una vez que hemos acabado con los números, es el turno de las letras 😜

Otro tipo básico de Python, e imprescindible, son las secuencias o cadenas de caracteres. Este tipo es conocido como string aunque su clase verdadera es str.

Formalmente, un string es una secuencia inmutable de caracteres en formato Unicode.

Para crear un string, simplemente tienes que encerrar entre comillas simples '' o dobles "" una secuencia de caracteres.

Se puede usar indistintamente comillas simples o dobles, con una particularidad. Si en la cadena de caracteres se necesita usar una comilla simple, tienes dos opciones: usar comillas dobles para encerrar el string, o bien, usar comillas simples pero anteponer el carácter \ a la comilla simple del interior de la cadena. El caso contrario es similar.

Veamos todo esto con un ejemplo:

>>> hola = 'Hola "Pythonista"'
>>> hola_2 = 'Hola \'Pythonista\''
>>> hola_3 = "Hola 'Pythonista'"
>>> print(hola)
Hola "Pythonista"
>>> print(hola_2)
Hola 'Pythonista'
>>> print(hola_3)
Hola 'Pythonista'

A diferencia de otros lenguajes, en Python no existe el tipo «carácter». No obstante, se puede simular con un string de un solo carácter:

>>> caracter_a = 'a'
>>> print(caracter_a)
a

Además de los tipos básicos, otros tipos fundamentales de Python son las secuencias (list y tuple), los conjuntos (set) y los mapas (dict).

Todos ellos son tipos compuestos y se utilizan para agrupar juntos varios valores.

  • Las listas son secuencias mutables de valores.
  • Las tuplas son secuencias inmutables de valores.
  • Los conjuntos se utilizan para representar conjuntos únicos de elementos, es decir, en un conjunto no pueden existir dos objetos iguales.
  • Los diccionarios son tipos especiales de contenedores en los que se puede acceder a sus elementos a partir de una clave única.
>>> lista = [1, 2, 3, 8, 9]
>>> tupla = (1, 4, 8, 0, 5)
>>> conjunto = set([1, 3, 1, 4])
>>> diccionario = {'a': 1, 'b': 3, 'z': 8}
>>> print(lista)
[1, 2, 3, 8, 9]
>>> print(tupla)
(1, 4, 8, 0, 5)
>>> print(conjunto)
{1, 3, 4}
>>> print(diccionario)
{'a': 1, 'b': 3, 'z': 8}

Conocer el tipo de una variable

Ahora te voy a presentar dos funciones para que puedas jugar con todo lo que hemos visto en este tutorial. Son type() e isinstance():

  • type() recibe como parámetro un objeto y te devuelve el tipo del mismo.
  • isinstance() recibe dos parámetros: un objeto y un tipo. Devuelve True si el objeto es del tipo que se pasa como parámetro y False en caso contrario.
>>> type(3)
<class 'int'>
>>> type(2.78)
<class 'float'>
>>> type('Hola')
<class 'str'>
>>> isinstance(3, float)
False
>>> isinstance(3, int)
True
>>> isinstance(3, bool)
False
>>> isinstance(False, bool)
True

Conversión de tipos

Lo último que veremos en este tutorial sobre tipos de datos es la conversión de tipos.

¿Esto qué significa?

Imagina que tienes una variable edad de tipo string cuyo valor es '25'. Se podría decir que edad, aunque realmente es una cadena de caracteres, contiene un número. Sin embargo, si intentas sumar 10 a edad, el intérprete te dará un error porque edad es de tipo str y 10 un tipo numérico.

>>> edad = '25'
>>> edad = edad + 10
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str

¿Cómo puedo tratar la variable edad como un número? Convirtiéndola a un tipo numérico, por ejemplo, al tipo int.

Para ello, Python ofrece las siguientes funciones:

  • str(): Devuelve la representación en cadena de caracteres del objeto que se pasa como parámetro.
  • int(): Devuelve un int a partir de un número o secuencia de caracteres.
  • float(): Devuelve un float a partir de un número o secuencia de caracteres.
  • complex(): Devuelve un complex a partir de un número o secuencia de caracteres.

Si a las funciones anteriores se les pasa como parámetro un valor inválido, el intérprete mostrará un error.

>>> edad = int(edad) + 10 # Convierte edad a int
>>> edad # edad es un int
35
>>> edad = str(edad) # Convierte edad a str
>>> edad # edad es un str (se muestran las '')
'35'
>>> float('18.66') # Convierte un str a float
18.66
>>> float('hola') # Convierte un str a float (pero no es válido)
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: could not convert string to float: 'hola'



Comentarios

Entradas populares de este blog

Primera clase