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

У меня есть функция в 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]

    Interesting Posts

    Как правильно выбрать отдельные ячейки в pandas: loc VS get_value (индекс, столбец)

    Зачем мне «sys.argv» запуска QApplication в PyQt?

    Разница между plt.draw () и plt.show () в matplotlib

    Подстановка Python SQLite с помощью подстановочных знаков в LIKE

    проблема с «wget» в python

    Сохраните изображение в файл изображения вместо его отображения с помощью Matplotlib

    Наследование класса Python: вызов функции производного класса

    Случайное перетасовка словаря в Python

    Как вы используете регулярное выражение в понимании списка в Python?

    Сокеты клиента Python, подключаемые к одному и тому же порту сокета сервера

    Найти cumsum subarrays, разбитый по индексам для массива numpy эффективно

    запрос sqlalchemy с флагом с ключевым словом в качестве переменной

    значение суммы двух разных словарей, имеющих один и тот же ключ

    маскировка встроенной переменной с ее магическим поведением?

    Разница между генераторами Python и итераторами

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