У меня есть функция в Python, которая может возвращать bool
или list
. Есть ли способ указать типы возврата, используя подсказки типа.
Например, это правильный способ сделать это?
def foo(id) -> list or bool:
...
У меня есть функция в Python, которая может возвращать bool
или list
. Есть ли способ указать типы возврата, используя подсказки типа.
Например, это правильный способ сделать это?
def foo(id) -> list or bool:
...
Ответы:
Из документации
класс
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:
и поэтому не будет делать то, что вы хотите.
Родной способ описать подсказку типа «А или В» - это Union (спасибо Бхаргаву Рао):
def foo(client_id: str) -> Union[list, bool]:
Я не хочу быть парнем, «почему вы хотите делать это в любом случае», но, возможно, иметь 2 типа возврата не то, что вы хотите:
Если вы хотите вернуть bool для указания какого-либо особого случая ошибки, рассмотрите возможность использования исключений. Если вы хотите вернуть bool как какое-то специальное значение, возможно, пустой список будет хорошим представлением. Вы также можете указать, что None
может быть возвращено сOptional[list]
Если кто-то приземлился здесь в поисках «как указать типы множественных возвращаемых значений?», Используйте Tuple[type_value1, ..., type_valueN]
from typing import Tuple
def f() -> Tuple[dict, str]:
a = {1: 2}
b = "hello"
return a, b
Больше информации: https://code-examples.net/en/q/2651e60