Как указать несколько типов возвращаемых данных с помощью подсказок типа


у меня есть функция в python, которая может либо вернуть a bool или list. Есть ли способ указать типы возвращаемых данных с помощью подсказок типа.

например, это правильный способ сделать это?

def foo(id) -> list or bool:
      ...
2 53

2 ответа:

С документация

класс typing.Union

тип союза; Union[X, Y] означает либо X, либо Y.

следовательно, правильный способ представления более одного возвращаемого типа данных -

from typing import Union


def foo(client_id: str) -> Union[list,bool]

но обратите внимание, что ввод не является обязательным. Python продолжает оставаться динамически типизированным языком. Синтаксис аннотации был разработан, чтобы помочь во время разработки кода перед выпуском в производство. Как говорится в PEP 484: "во время выполнения проверка типов не выполняется."

>>> def foo(a:str) -> list:
...     return("Works")
... 
>>> foo(1)
'Works'

как вы можете видеть, я передаю значение int и возвращаю str. Однако __annotations__ будут установлены соответствующие значения.

>>> foo.__annotations__ 
{'return': <class 'list'>, 'a': <class 'str'>}

перейдите через PEP 483 для получения дополнительной информации о подсказках типа. Также смотрите какие подсказки типа в Python 3.5?

Пожалуйста, обратите внимание, что это доступно только для Python 3.5 и вверх. Это ясно упоминается в PEP 484.

заявление def foo(client_id: str) -> list or bool: при вычислении эквивалентно и не будет делать то, что вы хотите.

родной способ описать подсказку типа" либо A, либо B " - это Союз (спасибо Bhargav РАО):

def foo(client_id: str) -> Union[list, bool]:

Я не хочу быть" почему вы хотите сделать это в любом случае " парень, но, возможно, имея 2 типа возврата не то, что вы хотите:

если вы хотите вернуть bool для указания некоторого типа специального случая ошибки, рассмотрите возможность использования исключений вместо. Если вы хотите вернуть bool как некоторое специальное значение, возможно, пустой список будет хорошим представлением. Вы также можете указать, что None может быть возвращена с Optional[list]