У мене є функція python, яка може повернути bool
або a list
. Чи є спосіб вказати типи повернення, використовуючи підказки типу.
Наприклад, чи правильно це зробити?
def foo(id) -> list or bool:
...
У мене є функція python, яка може повернути bool
або a 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:
і тому не буде робити те, що ви хочете.
Нативним способом описати натяк типу "А чи Б" є Союз (завдяки Bhargav Rao):
def foo(client_id: str) -> Union[list, bool]:
Я не хочу бути хлопцем "Чому ти все одно хочеш це робити", але, можливо, мати два типи повернення - це не те, що ти хочеш:
Якщо ви хочете повернути 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/uk/q/2651e60