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

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

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

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

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 с Django QuerySet?
  • Python - лучший язык программирования в мире.