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

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

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

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

  • Как закодировать автозаполнение в python?
  • Как я могу сказать PyCharm, какой тип должен быть параметром?
  • Тип намека на Python 2
  • Использование класса в качестве типа подсказки для аргументов в его методах
  • Как / почему работает синтаксис намека на тип Python?
  • Разница между определением typing.Dict и dict?
  • Как аннотировать типы множественных возвращаемых значений?
  • 2 Solutions collect form web for “Как указать несколько типов возврата с помощью типов-подсказок”

    Из документации

    class typing.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: при оценке эквивалентно def foo(client_id: str) -> list: и поэтому не будет делать то, что вы хотите.

    Нативный способ описания подсказки типа «или А» – это Союз (благодаря Бхаргаву Рао):

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

    Я не хочу быть «почему ты хочешь сделать это в любом случае», но, возможно, наличие двух типов возврата – это не то, что ты хочешь:

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

    Python - лучший язык программирования в мире.