Ho una funzione in Python che può restituire a bool
o a list
. C'è un modo per specificare i tipi di ritorno usando i suggerimenti di tipo.
Ad esempio, è questo il modo corretto di farlo?
def foo(id) -> list or bool:
...
Ho una funzione in Python che può restituire a bool
o a list
. C'è un modo per specificare i tipi di ritorno usando i suggerimenti di tipo.
Ad esempio, è questo il modo corretto di farlo?
def foo(id) -> list or bool:
...
Risposte:
Dalla documentazione
classe
typing.Union
Tipo di unione; Unione [X, Y] significa X o Y.
Quindi il modo corretto di rappresentare più di un tipo di dati di ritorno è
from typing import Union
def foo(client_id: str) -> Union[list,bool]
Ma nota che la digitazione non è forzata. Python continua a rimanere un linguaggio tipizzato in modo dinamico. La sintassi delle annotazioni è stata sviluppata per aiutare durante lo sviluppo del codice prima di essere rilasciata in produzione. Come afferma PEP 484, "nessun controllo del tipo avviene in fase di esecuzione".
>>> def foo(a:str) -> list:
... return("Works")
...
>>> foo(1)
'Works'
Come puoi vedere sto passando un valore int e restituendo una str. Tuttavia __annotations__
verrà impostato sui rispettivi valori.
>>> foo.__annotations__
{'return': <class 'list'>, 'a': <class 'str'>}
Consulta PEP 483 per ulteriori informazioni sui suggerimenti per il tipo. Vedi anche Cosa sono i suggerimenti sul tipo in Python 3.5 ?
Si prega di notare che questo è disponibile solo per Python 3.5 e versioni successive . Ciò è menzionato chiaramente in PEP 484 .
L'affermazione def foo(client_id: str) -> list or bool:
quando valutata è equivalente
def foo(client_id: str) -> list:
e quindi non farà ciò che desideri.
Il modo nativo per descrivere un suggerimento di tipo "A o B" è Union (grazie a Bhargav Rao):
def foo(client_id: str) -> Union[list, bool]:
Non voglio essere il ragazzo "Perché vuoi farlo comunque", ma forse avere 2 tipi di ritorno non è quello che vuoi:
Se si desidera restituire un valore booleano per indicare un tipo di caso di errore speciale, considerare invece l'utilizzo di Eccezioni. Se vuoi restituire un bool come valore speciale, forse un elenco vuoto sarebbe una buona rappresentazione. Puoi anche indicare che None
potrebbe essere restituito conOptional[list]
Nel caso in cui qualcuno sia atterrato qui alla ricerca di "come specificare tipi di valori di ritorno multipli?", Utilizzare Tuple[type_value1, ..., type_valueN]
from typing import Tuple
def f() -> Tuple[dict, str]:
a = {1: 2}
b = "hello"
return a, b
Ulteriori informazioni: https://code-examples.net/en/q/2651e60