Dati None e Binari
I programmi reali gestiscono valori mancanti e dati binari. Utilizzare None per indicare "nessun valore" e bytes/bytearray per contenuti binari grezzi. Comprendere quando ciascuno è appropriato e come convertire in modo sicuro tra testo e byte.
None per "Nessun Valore"
None è un singolo oggetto che significa "niente qui".
1234567result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")
Utilizzare is None invece di controlli di veridicità, poiché 0 e "" sono anch'essi valori falsi.
123value = 0 print(not value) # True print(value is None) # False
Valori predefiniti e alternative
None viene utilizzato come indicatore chiaro che un valore è intenzionalmente assente. Permette di distinguere tra "nessun valore fornito" e valori validi come 0 o "", rendendo l'uso di valori predefiniti e alternative più sicuro e prevedibile.
1234567x = None print(x or "unknown") # 'unknown' print("unknown" if x is None else x) x = 0 print(x or "unknown") # 'unknown' (maybe wrong) print("unknown" if x is None else x) # 0
Funzioni e Parametri
Questo esempio mostra come una funzione utilizzi un parametro impostato su None come segnale che nessun tag è stato fornito. Ciò consente alla funzione di assegnare un valore predefinito sicuro, permettendo comunque al chiamante di sovrascriverlo quando necessario.
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
bytes e bytearray per Dati Binari
str contiene testo, bytes e bytearray contengono valori di byte grezzi.
1234b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65
Codifica e Decodifica
La codifica converte il testo in byte per consentirne l'archiviazione o il trasferimento in modo affidabile, mentre la decodifica ripristina quei byte in testo leggibile. L'utilizzo di una codifica definita come UTF-8 garantisce la corretta conservazione dei caratteri.
123text = "café" data = text.encode("utf-8") back = data.decode("utf-8")
Combinazione di Testo e Bytes
Il testo (str) e i bytes (bytes) non possono essere combinati direttamente perché rappresentano tipi di dati differenti. Per combinarli in modo sicuro, è necessario convertire prima il testo in bytes utilizzando una codifica esplicita.
123456try: b"ID:" + "123" except TypeError as e: print(e) ok = b"ID:" + "123".encode("utf-8")
Differenze di Lunghezza
Alcuni caratteri occupano un solo elemento di testo ma più bytes, quindi la loro lunghezza in str e nella forma codificata può differire. Questo accade perché codifiche come UTF-8 possono utilizzare più di un byte per rappresentare un singolo carattere.
123ch = "é" len(ch) # 1 len(ch.encode()) # 2
File
I file binari devono essere aperti in modalità "rb" affinché i byte grezzi vengano letti esattamente come sono memorizzati. Questo impedisce a Python di tentare di interpretare i dati come testo.
# with open("example.png", "rb") as f:
# blob = f.read()
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
Fantastico!
Completion tasso migliorato a 3.45
Dati None e Binari
Scorri per mostrare il menu
I programmi reali gestiscono valori mancanti e dati binari. Utilizzare None per indicare "nessun valore" e bytes/bytearray per contenuti binari grezzi. Comprendere quando ciascuno è appropriato e come convertire in modo sicuro tra testo e byte.
None per "Nessun Valore"
None è un singolo oggetto che significa "niente qui".
1234567result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")
Utilizzare is None invece di controlli di veridicità, poiché 0 e "" sono anch'essi valori falsi.
123value = 0 print(not value) # True print(value is None) # False
Valori predefiniti e alternative
None viene utilizzato come indicatore chiaro che un valore è intenzionalmente assente. Permette di distinguere tra "nessun valore fornito" e valori validi come 0 o "", rendendo l'uso di valori predefiniti e alternative più sicuro e prevedibile.
1234567x = None print(x or "unknown") # 'unknown' print("unknown" if x is None else x) x = 0 print(x or "unknown") # 'unknown' (maybe wrong) print("unknown" if x is None else x) # 0
Funzioni e Parametri
Questo esempio mostra come una funzione utilizzi un parametro impostato su None come segnale che nessun tag è stato fornito. Ciò consente alla funzione di assegnare un valore predefinito sicuro, permettendo comunque al chiamante di sovrascriverlo quando necessario.
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
bytes e bytearray per Dati Binari
str contiene testo, bytes e bytearray contengono valori di byte grezzi.
1234b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65
Codifica e Decodifica
La codifica converte il testo in byte per consentirne l'archiviazione o il trasferimento in modo affidabile, mentre la decodifica ripristina quei byte in testo leggibile. L'utilizzo di una codifica definita come UTF-8 garantisce la corretta conservazione dei caratteri.
123text = "café" data = text.encode("utf-8") back = data.decode("utf-8")
Combinazione di Testo e Bytes
Il testo (str) e i bytes (bytes) non possono essere combinati direttamente perché rappresentano tipi di dati differenti. Per combinarli in modo sicuro, è necessario convertire prima il testo in bytes utilizzando una codifica esplicita.
123456try: b"ID:" + "123" except TypeError as e: print(e) ok = b"ID:" + "123".encode("utf-8")
Differenze di Lunghezza
Alcuni caratteri occupano un solo elemento di testo ma più bytes, quindi la loro lunghezza in str e nella forma codificata può differire. Questo accade perché codifiche come UTF-8 possono utilizzare più di un byte per rappresentare un singolo carattere.
123ch = "é" len(ch) # 1 len(ch.encode()) # 2
File
I file binari devono essere aperti in modalità "rb" affinché i byte grezzi vengano letti esattamente come sono memorizzati. Questo impedisce a Python di tentare di interpretare i dati come testo.
# with open("example.png", "rb") as f:
# blob = f.read()
Grazie per i tuoi commenti!