No artigo anterior vimos o que dados e seus tipos em Python; hoje iremos estar Fundindo os Tipos de Dados (Type Casting).
Em indústrias que trabalham com metais, fundição é o processo de despejar um metal em estado líquido ou fundido em um molde ou forma e deixá-lo esfriar para obter a forma desejada. Na programação, casting refere-se à conversão de um objeto de um tipo em outro.
Veja toda a série de posts sobre esse assunto: Aprendendo Python por Conta Própria
Casting em programação é quando você converte um tipo de dado para outro, como transformar um número inteiro em um número decimal. É como se você estivesse “moldando” o dado para se encaixar em um formato diferente.
Um pouco sobre funções em Python
Aqui iremos usar muito o termo funções. Mais o que é uma função?
Uma função em Python é um bloco de código que executa uma tarefa específica. Ela pode receber valores de entrada (chamados de argumentos), processar esses valores e retornar um resultado. É como quando você dá um número para uma calculadora, ela faz a conta e te dá o resultado de volta. As funções ajudam a organizar o código e tornam as coisas mais fáceis de entender e usar.
Podemos criar nossas próprias funções e reutilizá-las sempre que necessário, sem precisar digitar um monte de código novamente.
Python já traz um monte de funções já feitas, pré-definidas, que podemos usar. Como exemplo temos int(), float(), str()…
Tipos de Casting em Python
Temos dois tipos de Casting em Python, assim como em outras linguagens de programação: Casting Implícito e Explícito.
1. Casting implícito em Python
Casting implícito é quando o próprio compilador realiza a conversão de um tipo de dado para outro automaticamente, sem precisar que você faça isso explicitamente no código. Por exemplo, quando você atribui um número inteiro a uma variável do tipo float, o compilador realiza o casting implícito convertendo o valor automaticamente para o tipo float.
Python é uma linguagem fortemente tipada. Não permite a conversão automática de tipos entre tipos de dados não relacionados. Por exemplo, uma string não pode ser convertida em nenhum tipo de número. No entanto, um inteiro pode ser convertido em um float. Outras linguagens, como JavaScript, são linguagens de tipo fraco, onde um número inteiro é forçado em uma string para concatenação.
o requisito de memória de cada tipo de dados é diferente. Por exemplo, um objeto inteiro em Python ocupa 4 bytes de memória, enquanto um objeto flutuante precisa de 8 bytes por causa de sua parte fracionária. Conseqüentemente, o interpretador Python não converte automaticamente um float em int, porque isso resultará em perda de dados. Por outro lado, int pode ser facilmente convertido em float definindo sua parte fracionária como 0.
A conversão implícita de int para float ocorre quando qualquer operação aritmética em operandos int e float é realizada.
>>> a = 10 >>> b = 10.5 >>> c=a+b >>> print(c) 20.5
Para realizar sua adição, o objeto inteiro 10 é atualizado para 10.0. É um float equivalente ao seu valor numérico anterior.
Vejamos agora esse outro exemplo envolvendo um booleano, Lembrando que 1 também significa True(verdadeiro) e 0 False(falso).
>>> a = True; >>> b=10.5; >>> c=a+b; >>> print(c); 11.5
Na conversão implícita de tipo, um objeto Python com tamanho de byte menor é atualizado para corresponder ao tamanho de byte maior de outro objeto na operação.
Podemos ver acima que o resultado foi 11.5 pois foi somando 1(True) + 10.5 e isso ocorre porque um objeto booleano é primeiro atualizado para int e depois para float, antes da adição com um objeto de ponto flutuante.
2. Casting explícito em Python
Podemos usar as funções int(), float() e str() integradas do Python para realizar conversões explícitas, como string para inteiro.
- int() converte um literal inteiro em um objeto inteiro, um float em inteiro e uma string em inteiro se a própria string tiver uma representação literal de inteiro válida.
- float() retorna um objeto float se o argumento for um literal float, um número inteiro ou uma string com representação de ponto flutuante válida.
- str() envolve um número inteiro ou um objeto float entre aspas (‘) para retornar um objeto str.
- list(): uma string e uma tupla podem ser convertidas em um objeto de lista usando list()
- tuple(): a função tuple() converte uma string ou lista em uma tupla.
Ao final do post mostro mais funções para em uma tabela. Iremos trabalhar com essas nesse momento.
2.1 usando a função int()
A função int()
em Python é usada para converter um valor em um número inteiro. Por exemplo, se você tem o valor “10” como uma string e deseja usá-lo como um número inteiro em seus cálculos, você pode usar a função int("10")
. Ela removerá qualquer parte decimal e retornará o valor inteiro de 10.
>>> a = int(10) >>> a 10
Se ver a clase verá que é um inteiro
>>> type(a) <class 'int'>
Se o argumento para a função int() for um objeto flutuante(float) ou uma expressão de ponto flutuante, ele retornará um objeto int.
>>> a = int(10.5) #converte um objeto float em int >>> a 10 >>> type(a) <class 'int'> >>> a = int(2*3.14) # resultados float, é convertido em int >>> a 6 >>> type(a) <class 'int'>
A função int() também retorna o inteiro 1 se um objeto booleano for fornecido como argumento.
>>> a=int(True) >>> a 1 >>> type(a) <class 'int'>
Veja outros exempos:
a = int(1) # a resultará em 1 b = int(2.2) # b resultará em 2 c = int("3") # c resultará em 3 print (a) print (b) print (c)
2.1.1 Convertendo String em Integer
A função int() retorna um número inteiro de um objeto string, somente se contiver uma representação inteira válida.
>>> a=int("10") >>> a 10 >>> type(a) <class 'int'>
Se tentar converter uma string que mal representada, ou seja, um texto retornará erro.
>>> a=int("Olá Mundo") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: invalid literal for int() with base 10: 'Olá Mundo'
2.1.2 Convertendo Strings(binário, Octal e Hexa-Decimal) em Integer
Não sei porque essa explicação seria útil para mim nesse momento, mas aqui vai a prática sobre converter Strings(binário, Octal e Hexa-Decimal) em Integer. Lembrando que Integer que dizer inteiro, um número sem vírgula. Sei que cores e outros itens são representados em valores octal e hexa-decimal.
Isso porque a função int() também retorna números inteiros de strings binárias, octais e hexadecimais. Para isso, a função necessita de um parâmetro base que deve ser 2, 8 ou 16 respectivamente. A string deve ter uma representação binária/octal/hexadecimal válida. Não adianta tentar converter um texto qualquer em número 🙂
String Binário para Integer
Binários são representados apenas por 1 e 0. Então a string deve ser composta apenas por 1 e 0, e a base deve ser 2. Abaixo, o número binário 110011 é o equivalente para 51 em decimal.
>>> a = int("110011", 2) >>> a 51
String Octal para Integer
A string deve conter apenas de números de 0 a 7 dígitos e a base deve ser 8. O octal 20 representa 16 em decimal.
>>> a = int("20", 8) >>> a 16
String Hexa-decimal para Integer
A string deve conter apenas os símbolos hexadecimais, ou seja, de 0 à 9 e A, B, C, D, E ou F. A base deve ser 16.
O Hexadecimal 2A9 representa 681 em decimal. Você pode verificar facilmente essas conversões com o aplicativo de calculadora no Windows, Ubuntu ou Smartphones.
>>> a = int("2A9", 16) >>> a 681
3. Usando a função float()
A função float()
em Python é usada para converter um valor em um número de ponto flutuante, que é um número decimal com casas decimais. Assim como int(), float() é uma função integrada(built-in) em Python.
Só por curiosidade, usar float() com um objeto float como argumento é equivalente a declarar um objeto float diretamente. Então a = float(9.99) é a mesma coisa que a = 9.99. Você poderá usar type(a) para comprovar.
Se o argumento para a função float() for um número inteiro, o valor retornado será um ponto flutuante com parte fracionária definida como 0.
>>> a = float(100) >>> a 100.0 >>> type(a) <class 'float'>
A função float() retorna o objeto float de uma string, se a string contiver um número de ponto flutuante válido, caso contrário, ValueError será gerado.
>>> a = float("99") >>> a 99.0 >>> type(a) <class 'float'>
Abaixo gerará erro por não ter uma representação flot legal
>>> a = float("Ola") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: could not convert string to float: 'Ola'
Se colocar uma vírgula ao invés de ponto então gerará erro também:
>>> a = float("10,0") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: could not convert string to float: '10,0'
A notação científica de ponto flutuante também é considerada válida.
a = float("1.00E4") # isso vale b = float("1.00E-4") #esse casting também vale
Veja mais exemplos,
a = float(1) # a terá o valor 1.0 b = float(2.2) # b terá o valor 2.2 c = float("3.3") # c terá o valor 3.3 print (a) print (b) print (c)
4. Usando a função str()
A função str()
em Python converte um valor em uma representação de string. Ela é usada para transformar outros tipos de dados, como números ou objetos, em strings legíveis para humanos.
A função str() funciona de forma oposta à int() e flot(). Ele envolve um número inteiro ou um objeto float entre aspas (‘) para retornar um objeto str. A função str() retorna a representação em string de qualquer objeto Python.
A função str() possui três parâmetros,
- parâmetro (ou argumento), é obrigatório. É o objeto que desejamos converter para string.
- codificação é opcional
- erros, é opcionais.
4.1 conversão de integer para string
Você pode converter qualquer número inteiro em uma string da seguinte maneira:
>>> a = str(100)
4.2 conversão de float para string
A função str() converte objetos de ponto flutuante com notações de ponto flutuante, notação padrão com um ponto decimal separando a parte inteira e fracionária, e a notação científica em objeto string.
>>> a = str(100.0)
>>> a = str(10E4)
>>> a = str(1.23e-4)
Veja mais exemplos,
a = str(1) # a terá o valor de "1" b = str(2.2) # b terá o valor de "2.2" c = str("3.3") # c terá o valor de "3.3" print (a) print (b) print (c)
4.3 conversão de Booleano para string
Quando a constante booleana é inserida como argumento, ela é cercada por (‘) para que True se torne ‘True’. Objetos Lista e Tupla também podem receber argumentos para a função str(). A string resultante é a lista/tupla cercada por (‘).
>>> a = str(True)
4.3 conversão de Booleano para string
Objetos Lista e Tupla também podem receber argumentos para a função str(). A string resultante é a lista/tupla cercada por (‘).
>>> a = str([1,2,3])
>>> a = str((1,2,3))
>>> a = str({1:100, 2:200, 3:300})
5. list() e tuple(): Conversão de Tipos de dados sequenciais usando
Lista, Tupla e String são tipos de sequência do Python. Eles são uma coleção ordenada ou indexada de itens.
- list() Uma string e uma tupla podem ser convertidas em um objeto de lista usando a função list()
- tuple() a função tuple() converte uma string ou lista em uma tupla.
<<< a=[1,2,3,4,5] # objeto lista <<< b=(1,2,3,4,5) # objeto Tupla <<< c="Hello" # objeto String ### list() separa cada caractere da string e constrói a lista <<< obj=list(c) <<< obj ['H', 'e', 'l', 'l', 'o'] ### Os parênteses da tupla são substituídos por colchetes <<< obj=list(b) <<< obj [1, 2, 3, 4, 5] ### tuple() separa cada caractere da string e constrói uma tupla de caracteres <<< obj=tuple(c) <<< obj ('H', 'e', 'l', 'l', 'o') ### colchetes da lista são substituídos por parênteses. <<< obj=tuple(a) <<< obj (1, 2, 3, 4, 5) ### A função str() coloca a lista e a tupla dentro dos símbolos de aspas. <<< obj=str(a) <<< obj '[1, 2, 3, 4, 5]' <<< obj=str(b) <<< obj '(1, 2, 3, 4, 5)'
Assim, o recurso de conversão de tipo explícito do Python permite a conversão de um tipo de dados para outro com a ajuda de suas funções integradas.
Tabela com funções pré-definidas(built-in) de conversão de tipo de dados
Uma função built-in em Python é uma função pré-definida pela linguagem que está disponível para uso imediato, sem a necessidade de importar bibliotecas adicionais. Elas são funções básicas que executam tarefas comuns, como imprimir na tela, calcular valores matemáticos ou manipular listas. Em nosso caso, essas funções da tabela são para conversão de um dado em outro tipo.
Existem várias funções integradas para realizar a conversão de um tipo de dados para outro. Estas funções retornam um novo objeto representando o valor convertido.
Sr.No. | Descrição da função |
---|---|
1 | int(x[,base])Converte x em um número inteiro. base especifica a base se x for uma string. |
2 | long(x [,base] )Converte x em um número inteiro longo. base especifica a base se x for uma string. |
3 | floar (x)Converte x em um número de ponto flutuante. |
4 | complex (real [, imagem])Cria um número complexo. |
5 | str(x)Converte o objeto x em uma representação de string. |
6 | repr(x)Converte o objeto x em uma string de expressão. |
7 | eval (str)Avalia uma string e retorna um objeto. |
8 | tuple(s)Converte s em uma tupla. |
9 | list(s)Converte s em uma lista. |
10 | set(s)Converte s em um conjunto. |
11 | dict (d)Cria um dicionário. d deve ser uma sequência de tuplas (chave, valor). |
12 | frozenset(s)Converte s em um conjunto congelado. |
13 | chr(x)Converte um número inteiro em um caractere. |
14 | unichr(x)Converte um número inteiro em um caractere Unicode. |
15 | ord(x)Converte um único caractere em seu valor inteiro. |
16 | hex (x)Converte um número inteiro em uma string hexadecimal. |
17 | oct (x)Converte um número inteiro em uma string octal. |
Fontes: tutorialspoint
Comments on “Aprendendo Python por Conta Própria: Fundindo os Tipos de Dados (Type Casting)”