None e Dados Binários
Deslize para mostrar o menu
Programas reais lidam com valores ausentes e dados binários. Utilize None para indicar "sem valor" e bytes/bytearray para conteúdo binário bruto. Entenda quando cada um é apropriado e como converter com segurança entre texto e bytes.
None para "Sem Valor"
None é um único objeto que significa "nada aqui".
1234567result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")
Utilize is None em vez de verificações de veracidade, pois 0 e "" também são considerados falsos.
123value = 0 print(not value) # True print(value is None) # False
Valores padrão e alternativas
None é usado como um marcador claro de que um valor está intencionalmente ausente. Permite distinguir entre "nenhum valor fornecido" e valores válidos como 0 ou "", tornando padrões e alternativas mais seguros e previsíveis.
1234567x = None print(x or "unknown") # 'unknown' print("unknown" if x is None else x) x = 0 print(x or "unknown") # 'unknown' print("unknown" if x is None else x) # 0
Funções e Parâmetros
Este exemplo mostra como uma função utiliza um parâmetro definido como None para sinalizar que nenhuma tag foi fornecida. Isso permite que a função atribua um valor padrão seguro, enquanto ainda possibilita que quem chama a função o substitua quando necessário.
1234567def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" print(add_tag("hello")) # [general] hello print(add_tag("hello", "news")) # [news] hello
Dados Binários
str armazena texto, bytes e bytearray armazenam valores brutos de bytes.
1234b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65
Codificação e Decodificação
Codificação converte texto em bytes para que possa ser armazenado ou transferido de forma confiável, enquanto a decodificação restaura esses bytes de volta para texto legível. O uso de uma codificação definida como UTF-8 garante que os caracteres sejam preservados corretamente.
123text = "café" data = text.encode("utf-8") back = data.decode("utf-8")
Dados binários na prática
Utilização de bytes e bytearray para manipulação de informações binárias brutas. Esses tipos são essenciais para tarefas em que os dados não são apenas texto, como:
- Leitura e escrita de arquivos em modo binário (como imagens, áudios ou arquivos executáveis);
- Envio e recebimento de dados em redes, onde é necessário transmitir sequências exatas de bytes;
- Análise ou construção de protocolos binários, por exemplo, ao se comunicar com hardware ou APIs de baixo nível.
bytes vs bytearray
- Objetos
bytessão imutáveis: não é possível alterar seu conteúdo após a criação. Utilização recomendada quando são necessários dados binários fixos, como conteúdos de arquivos ou hashes criptográficos; - Objetos
bytearraysão mutáveis: é possível modificar seu conteúdo diretamente. Útil para construir ou editar dados binários antes de salvar ou enviar.
Exemplo: Modificação de dados binários
# Create a bytes object (immutable)
data = b"hello"
# Create a mutable copy
data_mutable = bytearray(data)
data_mutable[0] = 72 # Change 'h' (104) to 'H' (72)
print(data_mutable) # bytearray(b'Hello')
Conversão entre bytes e bytearray
- Converter
bytesparabytearraypermite modificações:
b = b"data"
ba = bytearray(b)
- Converter
bytearrayde volta parabytespara armazenamento ou transmissão:
ba = bytearray(b"abc")
b = bytes(ba)
Codificação e decodificação
- Utilização de
.encode()em uma string para obter um objetobytescom codificação específica (como UTF-8); - Utilização de
.decode()em um objetobytesoubytearraypara obter uma string.
Esses processos são cruciais ao trabalhar com entrada/saída de arquivos ou dados de rede, onde frequentemente é necessário receber ou enviar bytes brutos e convertê-los para texto legível ou vice-versa.
Casos de uso típicos
- Entrada/Saída de arquivos:
- Abrir arquivos em modo binário (
"rb"ou"wb") para ler ou escrever bytes exatos.
- Abrir arquivos em modo binário (
- Dados de rede:
- Comunicação via socket envia e recebe dados como bytes.
- Protocolos binários:
- Construção ou análise de pacotes utilizando
bytearraypara edições eficientes diretamente na memória.
- Construção ou análise de pacotes utilizando
A compreensão de quando utilizar cada tipo auxilia na escrita de código robusto para manipulação de dados em situações reais.
Casos de uso típicos para Bytes e Bytearray
Utilização de bytes e bytearray ao trabalhar diretamente com dados binários brutos, em vez de texto. Esses tipos são essenciais em diversos cenários:
- Leitura ou escrita de arquivos binários, como imagens, áudios ou executáveis;
- Manipulação de dados de rede, já que sockets enviam e recebem bytes, não strings;
- Interação com protocolos binários, onde é necessário construir ou analisar mensagens como sequências de bytes.
bytes é uma sequência imutável, ou seja, não é possível alterar seu conteúdo após a criação. Ideal para garantir que os dados permaneçam inalterados, como ao ler um arquivo ou receber um pacote de rede.
bytearray é mutável, permitindo modificar seu conteúdo diretamente. Use bytearray quando for necessário construir uma mensagem, alterar partes de um buffer ou manipular dados binários de forma eficiente antes de enviar ou salvar.
Quando utilizar cada um:
- Utilizar
bytespara dados binários fixos e somente leitura, como conteúdos de arquivos ou mensagens de rede que não precisam ser alteradas; - Utilizar
bytearrayquando for necessário editar, adicionar ou modificar os dados binários antes de processamento ou transmissão.
Conversão entre bytes e bytearray
É possível converter facilmente entre objetos bytes (imutáveis) e bytearray (mutáveis) em Python. Isso permite escolher o tipo adequado para cada necessidade—bytes para dados fixos, bytearray quando for necessário modificar o conteúdo.
- Utilizar o construtor
bytes()para transformar umbytearrayem um objetobytesimutável; - Utilizar o construtor
bytearray()para criar uma cópia mutável a partir de um objetobytes.
Esse procedimento é útil quando é necessário editar dados binários (usando bytearray) e, em seguida, torná-los imutáveis (usando bytes) para armazenamento ou transmissão segura.
raw = bytearray(b"data")
raw[0] = 68 # Change first byte to 'D'
locked = bytes(raw) # Convert to immutable bytes
b = b"example"
mutable = bytearray(b) # Convert to mutable bytearray
mutable.append(33) # Add '!' (ASCII 33)
Após a conversão para bytes, não é possível alterar o conteúdo. Utilizar bytearray quando for necessário editar dados binários antes de finalizá-los como bytes.
1234567891011# Convert bytes to bytearray b = b"hello" ba = bytearray(b) # Modify the bytearray (change 'h' to 'H') ba[0] = ord('H') print(ba) # bytearray(b'Hello') # Convert bytearray back to bytes b2 = bytes(ba) print(b2) # b'Hello'
123456try: b"ID:" + "123" except TypeError as e: print(e) ok = b"ID:" + "123".encode("utf-8")
Diferenças de comprimento
Alguns caracteres ocupam um elemento de texto, mas vários bytes, então seu comprimento em str e na forma codificada pode ser diferente. Isso ocorre porque codificações como UTF-8 podem usar mais de um byte para representar um único caractere.
123ch = "é" len(ch) # 1 len(ch.encode()) # 2
Arquivos
Arquivos binários devem ser abertos no modo "rb" para que seus bytes brutos sejam lidos exatamente como estão armazenados. Isso impede que o Python tente interpretar os dados como texto.
# with open("example.png", "rb") as f:
# blob = f.read()
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
None e Dados Binários
Programas reais lidam com valores ausentes e dados binários. Utilize None para indicar "sem valor" e bytes/bytearray para conteúdo binário bruto. Entenda quando cada um é apropriado e como converter com segurança entre texto e bytes.
None para "Sem Valor"
None é um único objeto que significa "nada aqui".
1234567result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")
Utilize is None em vez de verificações de veracidade, pois 0 e "" também são considerados falsos.
123value = 0 print(not value) # True print(value is None) # False
Valores padrão e alternativas
None é usado como um marcador claro de que um valor está intencionalmente ausente. Permite distinguir entre "nenhum valor fornecido" e valores válidos como 0 ou "", tornando padrões e alternativas mais seguros e previsíveis.
1234567x = None print(x or "unknown") # 'unknown' print("unknown" if x is None else x) x = 0 print(x or "unknown") # 'unknown' print("unknown" if x is None else x) # 0
Funções e Parâmetros
Este exemplo mostra como uma função utiliza um parâmetro definido como None para sinalizar que nenhuma tag foi fornecida. Isso permite que a função atribua um valor padrão seguro, enquanto ainda possibilita que quem chama a função o substitua quando necessário.
1234567def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" print(add_tag("hello")) # [general] hello print(add_tag("hello", "news")) # [news] hello
Dados Binários
str armazena texto, bytes e bytearray armazenam valores brutos de bytes.
1234b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65
Codificação e Decodificação
Codificação converte texto em bytes para que possa ser armazenado ou transferido de forma confiável, enquanto a decodificação restaura esses bytes de volta para texto legível. O uso de uma codificação definida como UTF-8 garante que os caracteres sejam preservados corretamente.
123text = "café" data = text.encode("utf-8") back = data.decode("utf-8")
Dados binários na prática
Utilização de bytes e bytearray para manipulação de informações binárias brutas. Esses tipos são essenciais para tarefas em que os dados não são apenas texto, como:
- Leitura e escrita de arquivos em modo binário (como imagens, áudios ou arquivos executáveis);
- Envio e recebimento de dados em redes, onde é necessário transmitir sequências exatas de bytes;
- Análise ou construção de protocolos binários, por exemplo, ao se comunicar com hardware ou APIs de baixo nível.
bytes vs bytearray
- Objetos
bytessão imutáveis: não é possível alterar seu conteúdo após a criação. Utilização recomendada quando são necessários dados binários fixos, como conteúdos de arquivos ou hashes criptográficos; - Objetos
bytearraysão mutáveis: é possível modificar seu conteúdo diretamente. Útil para construir ou editar dados binários antes de salvar ou enviar.
Exemplo: Modificação de dados binários
# Create a bytes object (immutable)
data = b"hello"
# Create a mutable copy
data_mutable = bytearray(data)
data_mutable[0] = 72 # Change 'h' (104) to 'H' (72)
print(data_mutable) # bytearray(b'Hello')
Conversão entre bytes e bytearray
- Converter
bytesparabytearraypermite modificações:
b = b"data"
ba = bytearray(b)
- Converter
bytearrayde volta parabytespara armazenamento ou transmissão:
ba = bytearray(b"abc")
b = bytes(ba)
Codificação e decodificação
- Utilização de
.encode()em uma string para obter um objetobytescom codificação específica (como UTF-8); - Utilização de
.decode()em um objetobytesoubytearraypara obter uma string.
Esses processos são cruciais ao trabalhar com entrada/saída de arquivos ou dados de rede, onde frequentemente é necessário receber ou enviar bytes brutos e convertê-los para texto legível ou vice-versa.
Casos de uso típicos
- Entrada/Saída de arquivos:
- Abrir arquivos em modo binário (
"rb"ou"wb") para ler ou escrever bytes exatos.
- Abrir arquivos em modo binário (
- Dados de rede:
- Comunicação via socket envia e recebe dados como bytes.
- Protocolos binários:
- Construção ou análise de pacotes utilizando
bytearraypara edições eficientes diretamente na memória.
- Construção ou análise de pacotes utilizando
A compreensão de quando utilizar cada tipo auxilia na escrita de código robusto para manipulação de dados em situações reais.
Casos de uso típicos para Bytes e Bytearray
Utilização de bytes e bytearray ao trabalhar diretamente com dados binários brutos, em vez de texto. Esses tipos são essenciais em diversos cenários:
- Leitura ou escrita de arquivos binários, como imagens, áudios ou executáveis;
- Manipulação de dados de rede, já que sockets enviam e recebem bytes, não strings;
- Interação com protocolos binários, onde é necessário construir ou analisar mensagens como sequências de bytes.
bytes é uma sequência imutável, ou seja, não é possível alterar seu conteúdo após a criação. Ideal para garantir que os dados permaneçam inalterados, como ao ler um arquivo ou receber um pacote de rede.
bytearray é mutável, permitindo modificar seu conteúdo diretamente. Use bytearray quando for necessário construir uma mensagem, alterar partes de um buffer ou manipular dados binários de forma eficiente antes de enviar ou salvar.
Quando utilizar cada um:
- Utilizar
bytespara dados binários fixos e somente leitura, como conteúdos de arquivos ou mensagens de rede que não precisam ser alteradas; - Utilizar
bytearrayquando for necessário editar, adicionar ou modificar os dados binários antes de processamento ou transmissão.
Conversão entre bytes e bytearray
É possível converter facilmente entre objetos bytes (imutáveis) e bytearray (mutáveis) em Python. Isso permite escolher o tipo adequado para cada necessidade—bytes para dados fixos, bytearray quando for necessário modificar o conteúdo.
- Utilizar o construtor
bytes()para transformar umbytearrayem um objetobytesimutável; - Utilizar o construtor
bytearray()para criar uma cópia mutável a partir de um objetobytes.
Esse procedimento é útil quando é necessário editar dados binários (usando bytearray) e, em seguida, torná-los imutáveis (usando bytes) para armazenamento ou transmissão segura.
raw = bytearray(b"data")
raw[0] = 68 # Change first byte to 'D'
locked = bytes(raw) # Convert to immutable bytes
b = b"example"
mutable = bytearray(b) # Convert to mutable bytearray
mutable.append(33) # Add '!' (ASCII 33)
Após a conversão para bytes, não é possível alterar o conteúdo. Utilizar bytearray quando for necessário editar dados binários antes de finalizá-los como bytes.
1234567891011# Convert bytes to bytearray b = b"hello" ba = bytearray(b) # Modify the bytearray (change 'h' to 'H') ba[0] = ord('H') print(ba) # bytearray(b'Hello') # Convert bytearray back to bytes b2 = bytes(ba) print(b2) # b'Hello'
123456try: b"ID:" + "123" except TypeError as e: print(e) ok = b"ID:" + "123".encode("utf-8")
Diferenças de comprimento
Alguns caracteres ocupam um elemento de texto, mas vários bytes, então seu comprimento em str e na forma codificada pode ser diferente. Isso ocorre porque codificações como UTF-8 podem usar mais de um byte para representar um único caractere.
123ch = "é" len(ch) # 1 len(ch.encode()) # 2
Arquivos
Arquivos binários devem ser abertos no modo "rb" para que seus bytes brutos sejam lidos exatamente como estão armazenados. Isso impede que o Python tente interpretar os dados como texto.
# with open("example.png", "rb") as f:
# blob = f.read()
Obrigado pelo seu feedback!