Mam w Pythonie funkcję, która może zwrócić a bool
lub a list
. Czy istnieje sposób na określenie typów zwrotów za pomocą podpowiedzi typu.
Na przykład, czy jest to właściwy sposób, aby to zrobić?
def foo(id) -> list or bool:
...
Mam w Pythonie funkcję, która może zwrócić a bool
lub a list
. Czy istnieje sposób na określenie typów zwrotów za pomocą podpowiedzi typu.
Na przykład, czy jest to właściwy sposób, aby to zrobić?
def foo(id) -> list or bool:
...
Odpowiedzi:
klasa
typing.Union
Typ Unii; Związek [X, Y] oznacza X lub Y.
Dlatego właściwym sposobem reprezentowania więcej niż jednego zwracanego typu danych jest
from typing import Union
def foo(client_id: str) -> Union[list,bool]
Pamiętaj jednak, że pisanie nie jest wymuszone. Python nadal pozostaje językiem o dynamicznym pisaniu. Składnia adnotacji została opracowana, aby pomóc podczas opracowywania kodu przed udostępnieniem go do produkcji. Jak stwierdza PEP 484, „sprawdzanie typu nie zachodzi w czasie wykonywania”.
>>> def foo(a:str) -> list:
... return("Works")
...
>>> foo(1)
'Works'
Jak widać, przekazuję wartość int i zwracam str. Jednak __annotations__
zostaną ustawione na odpowiednie wartości.
>>> foo.__annotations__
{'return': <class 'list'>, 'a': <class 'str'>}
Proszę przejrzeć PEP 483, aby uzyskać więcej informacji na temat podpowiedzi typu. Zobacz także Co to są wskazówki dotyczące typów w Python 3.5 ?
Należy pamiętać, że jest to dostępne tylko dla języka Python 3.5 i nowszych wersji. Jest to wyraźnie wspomniane w PEP 484 .
Oświadczenie def foo(client_id: str) -> list or bool:
po ocenie jest równoważne
def foo(client_id: str) -> list:
i dlatego nie zrobi tego, co chcesz.
Rodzimym sposobem opisu wskazówki typu „A lub B” jest Union (dzięki Bhargav Rao):
def foo(client_id: str) -> Union[list, bool]:
Nie chcę być facetem „Dlaczego i tak to robić”, ale być może 2 typy zwrotów nie są tym, czego chcesz:
Jeśli chcesz zwrócić wartość bool wskazującą na jakiś szczególny przypadek błędu, rozważ użycie wyjątków. Jeśli chcesz zwrócić wartość bool jako jakąś specjalną wartość, być może pusta lista byłaby dobrą reprezentacją. Możesz również wskazać, że None
można go zwrócićOptional[list]
Jeśli ktoś wylądował tutaj w poszukiwaniu „jak określić typy wielu zwracanych wartości?”, Użyj Tuple[type_value1, ..., type_valueN]
from typing import Tuple
def f() -> Tuple[dict, str]:
a = {1: 2}
b = "hello"
return a, b
Więcej informacji: https://code-examples.net/en/q/2651e60