如何键入一个函数,如果输入是字符串,则返回 None,否则按原样返回输入

问题描述 投票:0回答:1

我想知道如下所示输入注释 python 函数的正确方法是什么?

def f(value):
    if isinstance(value, str):
        return None
    return value

这是一个玩具示例,类似于我遇到的需要类型注释的 python。使用

Union

def f(value: Union[float, int, str]) -> Union[float, int, None]:
    if isinstance(value, str):
        return None
    return value

感觉不对,因为它不执行规则

  • int
    输入必须产生
    int
    输出。
  • a
    float
    输入必须产生
    float
    输出。
  • a
    str
    输入必须产生
    None

假设输入只能是

int/float/str
之一。

python mypy python-typing
1个回答
2
投票

您可以使用

typing.overload
根据参数类型缩小返回值的类型:

from typing import overload

@overload
def f(value: str) -> None: ...

@overload
def f(value: int) -> int: ...

@overload
def f(value: float) -> float: ...

def f(value: int|float|str) -> int|float|None:
    if isinstance(value, str):
        return None
    return value

请注意,实际实现使用所有可能的参数和返回类型的联合。

如果对函数的调用符合重载存根之一,则会推断出适当的返回类型:

reveal_type(f("foo"))  # revealed type is "None"
reveal_type(f(123))    # revealed type is "builtins.int"
© www.soinside.com 2019 - 2024. All rights reserved.