Cast en Python
Hacer un cast o casting significa convertir un tipo de dato a
otro. Anteriormente hemos visto tipos como
los int, string o float. Pues bien, es posible convertir de un tipo
a otro.
Pero antes de nada, veamos los diferentes tipos de cast o
conversión de tipos que se pueden hacer. Existen dos:
Conversión implícita: Es realizada automáticamente por
Python. Sucede cuando realizamos ciertas operaciones
con dos tipos distintos.
Conversión explícita: Es realizada expresamente por
nosotros, como por ejemplo convertir
de str a int con str() .
Conversión implícita
Esta conversión de tipos es realizada automáticamente por
Python, prácticamente sin que nos demos cuenta. Aún así, es
importante saber lo que pasa por debajo para evitar
problemas futuros.
El ejemplo más sencillo donde podemos ver este
comportamiento es el siguiente:
a = 1 # <class 'int'>
b = 2.3 # <class 'float'>
a = a + b
print(a) # 3.3
print(type(a)) # <class 'float'>
a es un int
b es un float
Pero si sumamos a y b y almacenamos el resultado en a ,
podemos ver como internamente Python ha convertido
el int en float para poder realizar la operación, y la variable
resultante es float
Sin embargo hay otros casos donde Python no es tan listo y
no es capaz de realizar la conversión. Si intentamos sumar
un int a un string, tendremos un error TypeError .
a = 1
b = "2.3"
c = a + b
# TypeError: unsupported operand type(s) for +: 'int' and 'str'
Si te das cuenta, es lógico que esto sea así, ya que en este
caso b era "2.3" , pero ¿y si fuera "Hola" ? ¿Cómo se podría
sumar eso? No tiene sentido.
Conversión explicita
Por otro lado, podemos hacer conversiones entre tipos
o cast de manera explícita haciendo uso de diferentes
funciones que nos proporciona Python. Las más usadas son
las siguientes:
float(), str(), int(), list(), set()
Y algunas otras como hex(), oct() y bin()
Convertir float a int
Para convertir de float a int debemos usar float() . Pero
mucho cuidado, ya que el tipo entero no puede almacena
decimales, por lo que perderemos lo que haya después de la
coma.
a = 3.5
a = int(a)
print(a)
# Salida: 3
Convertir float a string
Podemos convertir un float a string con str() . Podemos ver en
el siguiente código como cambia el tipo de a después de
hacer el cast.
a = 3.5
print(type(a)) # <class 'float'>
a = str(a)
print(type(a)) # <class 'str'>
Convertir string a float
Podemos convertir un string a float usando float() . Es
importante notar que se usa el . como separador.
a = "35.5"
print(float(a))
# Salida: 35.5
El siguiente código daría un error, dado que , no se reconoce
por defecto como separador decimal.
a = "35,5"
print(float(a))
# Salida: ValueError: could not convert string to float: '35,5'
Y por último, resulta obvio pensar que el siguiente código
dará un error también.
a = "Python"
print(float(a))
# Salida: ValueError: could not convert string to float: 'Python'
Convertir string a int
Al igual que la conversión a float del caso anterior, podemos
convertir de string a int usando int() .
a = "3"
print(type(a)) # <class 'str'>
a = int(a)
print(type(a)) # <class 'int'>
Cuidado ya que no es posible convertir a int cualquier valor.
a = "Python"
a = int(a)
# ValueError: invalid literal for int() with base 10: 'Python'
Convertir int a string
La conversión de int a string se puede realizar con str() .
A diferencia de otras conversiones, esta puede hacerse
siempre, ya que cualquier valor entero que se nos ocurra
poner en a , podrá ser convertido a string.
a = 10
print(type(a)) # <class 'int'>
a = str(a)
print(type(a)) # <class 'str'>
Convertir a list
Es también posible hacer un cast a lista, desde por ejemplo
un set. Para ello podemos usar list() .
a = {1, 2, 3}
b = list(a)
print(type(a)) # <class 'set'>
print(type(b)) # <class 'list'>
Convertir a set
Y de manera completamente análoga, podemos convertir
de lista a set haciendo uso de set() .
a = ["Python", "Mola"]
b = set(a)
print(type(a)) # <class 'list'>
print(type(b)) # <class 'set'>
Esperamos que esto haya servido para aclarar el concepto
de casts o conversiones de tipos en Python. Es muy
importante tener bien claro el tipo de datos con el que
estamos trabajando en cada momento, ya que Python es un
lenguaje con tipado dinámico, algo que puede ser una gran
ventaja, pero también causa de muchos quebraderos de
cabeza.
Y recuerda, la función type() es tu amiga.
Si quieres saber más, tal vez te interese el concepto de duck
typing.