Ich habe eine Funktion in Python, die entweder a bool
oder a zurückgeben kann list
. Gibt es eine Möglichkeit, die Rückgabetypen mithilfe von Typhinweisen anzugeben?
Ist dies beispielsweise der richtige Weg, dies zu tun?
def foo(id) -> list or bool:
...
python
python-3.x
return-type
type-hinting
python-3.5
Yahya Uddin
quelle
quelle
Antworten:
Aus der Dokumentation
Daher ist der richtige Weg, mehr als einen Rückgabedatentyp darzustellen,
Beachten Sie jedoch, dass die Eingabe nicht erzwungen wird. Python bleibt weiterhin eine dynamisch typisierte Sprache. Die Anmerkungssyntax wurde entwickelt, um bei der Entwicklung des Codes zu helfen, bevor er in die Produktion freigegeben wird. Wie in PEP 484 angegeben, "findet zur Laufzeit keine Typprüfung statt."
Wie Sie sehen können, übergebe ich einen int-Wert und gebe einen str zurück. Das
__annotations__
wird jedoch auf die jeweiligen Werte eingestellt.Weitere Informationen zu Typhinweisen finden Sie in PEP 483 . Siehe auch Was sind Typhinweise in Python 3.5 ?
Bitte beachten Sie, dass dies nur für Python 3.5 und höher verfügbar ist. Dies wird in PEP 484 deutlich erwähnt .
quelle
Die Aussage
def foo(client_id: str) -> list or bool:
bei der Auswertung entsprichtdef foo(client_id: str) -> list:
und wird daher nicht das tun, was Sie wollen.Die native Art, einen Hinweis vom Typ "entweder A oder B" zu beschreiben, ist Union (dank Bhargav Rao):
Ich möchte nicht der Typ "Warum willst du das überhaupt tun?" Sein, aber vielleicht ist es nicht das, was du willst, wenn du zwei Rückgabetypen hast:
Wenn Sie einen Bool zurückgeben möchten, um einen speziellen Fehlerfall anzuzeigen, sollten Sie stattdessen Ausnahmen verwenden. Wenn Sie einen Bool als speziellen Wert zurückgeben möchten, ist eine leere Liste möglicherweise eine gute Darstellung. Sie können auch angeben, dass mit
None
zurückgegeben werden könnteOptional[list]
quelle
Falls jemand hier gelandet ist, um zu erfahren, wie Typen mit mehreren Rückgabewerten angegeben werden können, verwenden Sie
Tuple[type_value1, ..., type_valueN]
Weitere Informationen: https://code-examples.net/en/q/2651e60
quelle