PROGRAMMAZIONE PYTHON
Secondo la documentazione di Python, typing.Optional è un modo pratico per indicare che un oggetto può essere None. È un modo conciso ed elegante per esprimere questo concetto, ma è anche cristallino?
Vorrei riformulare questa domanda: quando vedi la parola “opzionale” in un contesto Python, cosa pensi che significhi? Immagina di vedere un argomento chiamato x quello ha il tipo di Optional(int). IL int part è piuttosto chiaro, poiché molto probabilmente indica un numero intero, ma cosa fa Optional Significare? Qual è il tuo primo pensiero?
Consideriamo le due opzioni seguenti:
- Non devo fornire un valore di
xperché è facoltativo. xil valore può essere uno dei dueintONone.
Se conosci abbastanza bene i suggerimenti sul tipo Python, sai che l’opzione 2 è corretta. Ma quando non lo fai… Forse mi sbaglio, ma non riesco a immaginare una persona che non conosca Python che scelga l’opzione 2. È l’opzione 1 che sembra avere più senso. Quando vedo l’informazione che qualcosa è facoltativo, penso che… beh, che sia facoltativo…
Questo problema porta ad un frequente uso improprio di typing.Optional tipo. Questo articolo ha lo scopo di far luce su questo uso improprio e guidarvi verso la corretta comprensione di questa tipologia.
Questi tre suggerimenti di tipo sono equivalenti:
from typing import Optional, Unionx: Union(str, None)
x: Optional(str)
x: str | None
Ognuno di loro trasmette la stessa informazione: quella x può essere una stringa o None. Sebbene perfettamente valido, il primo (Union(str, None)) rappresenta le prime fasi del suggerimento sul tipo in Python: era l’approccio iniziale, ma al giorno d’oggi non è necessariamente il metodo preferito. Poi, Optional è stato aggiunto al typing modulo, fornendo un modo più conciso e diretto per esprimere questo concetto. Secondo IL mypy documentazione:
Puoi usare il
Optionalmodificatore di tipo per definire una variante di tipo che consenteNonead esempioOptional(int)(Optional(X)è la scorciatoia preferita perUnion(X, None)).
Fonte: towardsdatascience.com
