None e Dados Binários
Programas reais lidam com valores ausentes e dados brutos de arquivos ou redes. Utilize None para representar "nenhum valor" e bytes ou bytearray para dados binários. Este capítulo mostra quando usar cada um e como transitar com segurança entre texto e bytes.
None para "Nenhum Valor"
None é um objeto especial único que significa "nada aqui".
12345678910111213# Basic checks result = None email = None print("result is None:", result is None) # True print("email is None:", email is None) # True # Identity checks are the reliable way if result is None: print("No result yet") if email is not None: print("Email present") else: print("Email missing")
None é considerado falso, mas 0 e "" também são. Prefira is None quando realmente quiser indicar "ausente".
123value = 0 print("not value:", not value) # True - but 0 is a valid value print("value is None:", value is None) # False - correctly distinguishes 0 from missing
Valores padrão e alternativas
1234567891011x = None safe_or = x or "unknown" # replaces any falsey value safe_none_only = "unknown" if x is None else x print("x=None, x or 'unknown':", safe_or) # 'unknown' print("x=None, None-only fallback:", safe_none_only) # 'unknown' x = 0 safe_or = x or "unknown" safe_none_only = "unknown" if x is None else x print("x=0, x or 'unknown':", safe_or) # 'unknown' - maybe not desired print("x=0, None-only fallback:", safe_none_only) # 0 - preserves valid zero
Funções e Parâmetros
12345678910111213def find_user(name): # returns None if not found return None def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" user = find_user("Ada") print("user is None:", user is None) # True print(add_tag("hello")) # "[general] hello" print(add_tag("hello", tag="news")) # "[news] hello"
bytes e bytearray para Dados Binários
Texto utiliza str e armazena caracteres Unicode. Dados binários utilizam bytes ou bytearray e armazenam valores brutos de bytes de 0 a 255.
123456789# Creating binary data b1 = b"hello" # bytes literal b2 = bytes([72, 105]) # b"Hi" buf = bytearray(b"abc") # mutable buf[0] = 65 # now b"Abc" print("b1:", b1, type(b1)) # b'hello' <class 'bytes'> print("b2:", b2, type(b2)) # b'Hi' <class 'bytes'> print("buf:", buf, type(buf)) # bytearray(b'Abc') <class 'bytearray'>
Conversão entre Texto e Bytes: Encode e Decode
1234567text = "café" data = text.encode("utf-8") # to bytes back = data.decode("utf-8") # back to str print("text:", text, type(text)) # café <class 'str'> print("data:", data, type(data)) # b'caf\xc3\xa9' <class 'bytes'> print("back:", back, type(back)) # café <class 'str'>
Mistura de Texto e Bytes - Inválido sem Conversão
123456789# Non-valid operation with explicit error print try: bad = b"ID:" + "123" # bytes + str - not allowed except TypeError as e: print("TypeError when mixing bytes and str:", e) # Correct combination ok = b"ID:" + "123".encode("utf-8") print("combined bytes:", ok) # b'ID:123'
Comprimentos podem diferir
123ch = "é" print("len('é') as str:", len(ch)) # 1 character print("len('é' encoded):", len(ch.encode("utf-8")))# 2 bytes
Arquivos
# Binary files yield bytes
# with open("example.png", "rb") as f:
# blob = f.read()
1. Qual verificação detecta corretamente um valor ausente?
2. Qual linha combina corretamente texto com um prefixo de bytes?
3. Qual afirmação está correta?
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 5
None e Dados Binários
Deslize para mostrar o menu
Programas reais lidam com valores ausentes e dados brutos de arquivos ou redes. Utilize None para representar "nenhum valor" e bytes ou bytearray para dados binários. Este capítulo mostra quando usar cada um e como transitar com segurança entre texto e bytes.
None para "Nenhum Valor"
None é um objeto especial único que significa "nada aqui".
12345678910111213# Basic checks result = None email = None print("result is None:", result is None) # True print("email is None:", email is None) # True # Identity checks are the reliable way if result is None: print("No result yet") if email is not None: print("Email present") else: print("Email missing")
None é considerado falso, mas 0 e "" também são. Prefira is None quando realmente quiser indicar "ausente".
123value = 0 print("not value:", not value) # True - but 0 is a valid value print("value is None:", value is None) # False - correctly distinguishes 0 from missing
Valores padrão e alternativas
1234567891011x = None safe_or = x or "unknown" # replaces any falsey value safe_none_only = "unknown" if x is None else x print("x=None, x or 'unknown':", safe_or) # 'unknown' print("x=None, None-only fallback:", safe_none_only) # 'unknown' x = 0 safe_or = x or "unknown" safe_none_only = "unknown" if x is None else x print("x=0, x or 'unknown':", safe_or) # 'unknown' - maybe not desired print("x=0, None-only fallback:", safe_none_only) # 0 - preserves valid zero
Funções e Parâmetros
12345678910111213def find_user(name): # returns None if not found return None def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" user = find_user("Ada") print("user is None:", user is None) # True print(add_tag("hello")) # "[general] hello" print(add_tag("hello", tag="news")) # "[news] hello"
bytes e bytearray para Dados Binários
Texto utiliza str e armazena caracteres Unicode. Dados binários utilizam bytes ou bytearray e armazenam valores brutos de bytes de 0 a 255.
123456789# Creating binary data b1 = b"hello" # bytes literal b2 = bytes([72, 105]) # b"Hi" buf = bytearray(b"abc") # mutable buf[0] = 65 # now b"Abc" print("b1:", b1, type(b1)) # b'hello' <class 'bytes'> print("b2:", b2, type(b2)) # b'Hi' <class 'bytes'> print("buf:", buf, type(buf)) # bytearray(b'Abc') <class 'bytearray'>
Conversão entre Texto e Bytes: Encode e Decode
1234567text = "café" data = text.encode("utf-8") # to bytes back = data.decode("utf-8") # back to str print("text:", text, type(text)) # café <class 'str'> print("data:", data, type(data)) # b'caf\xc3\xa9' <class 'bytes'> print("back:", back, type(back)) # café <class 'str'>
Mistura de Texto e Bytes - Inválido sem Conversão
123456789# Non-valid operation with explicit error print try: bad = b"ID:" + "123" # bytes + str - not allowed except TypeError as e: print("TypeError when mixing bytes and str:", e) # Correct combination ok = b"ID:" + "123".encode("utf-8") print("combined bytes:", ok) # b'ID:123'
Comprimentos podem diferir
123ch = "é" print("len('é') as str:", len(ch)) # 1 character print("len('é' encoded):", len(ch.encode("utf-8")))# 2 bytes
Arquivos
# Binary files yield bytes
# with open("example.png", "rb") as f:
# blob = f.read()
1. Qual verificação detecta corretamente um valor ausente?
2. Qual linha combina corretamente texto com um prefixo de bytes?
3. Qual afirmação está correta?
Obrigado pelo seu feedback!