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
x
perché è facoltativo. x
il valore può essere uno dei dueint
ONone
.
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
Optional
modificatore di tipo per definire una variante di tipo che consenteNone
ad esempioOptional(int)
(Optional(X)
è la scorciatoia preferita perUnion(X, None)
).
Fonte: towardsdatascience.com