如果函数返回多种类型,我可以声明它的返回值吗?

bre*_*an0 2 python type-hinting

假设我有一个这样的函数:

def A(test=False):
    if test:
        return 1
    return "no value passed in for test"
Run Code Online (Sandbox Code Playgroud)

在 Typescript 中,你可以做类似的事情

function A(test=false) <number | string> {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但如果我尝试用 Python 做同样的事情,我会得到一个错误。

def A(test=False) -> (int, str):

def A(test=False) -> [int, str]:

def A(test=False) -> int or str:
Run Code Online (Sandbox Code Playgroud)

在处理类型检查中的歧义方面,我对 Python 有了更好的理解。所以这可能不是问题。但我很感兴趣是否有正确的方法可以做到这一点。

Mis*_*agi 5

用于typing.Union多种类型的“非此即彼”关系。

from typing import Union

def fn(test=False) -> Union[str, int]:
    if test:
        return 1
    return "no value passed in for test"
Run Code Online (Sandbox Code Playgroud)

在 Python 3.10 中,二元或运算符|可用于根据PEP 604创建并集:

def fn(test=False) -> str | int:
    if test:
        return 1
    return "no value passed in for test"
Run Code Online (Sandbox Code Playgroud)