如何指定 return 类型与输入类型相同?

How do I specify that the return type will be the same as the input type?

我在下面有一个函数,其中 target 可以是任何类型。我想键入此函数,以便输出 T 与作为 target.

传入的任何类型相同
from typing import Type, TypeVar

T = TypeVar("T")

def lowercase_if_possible(target: Type[T]) -> T:
    if isinstance(target, str):
        return target.lower()
    return target

我认为这与泛型有关,但我无法弄清楚语法,因为 Python 文档仅显示在 类 上使用的泛型,而不是单个函数。

您接近正确的解决方案,只需使用 T 作为 target 的类型,它应该可以解决问题。

Type[T]表示target的值是一个class(或subclass)本身,而不是类型的值。例如,

def instantiate(c: Type[T]) -> T:
    return c()

instantiate(int)  # Returns 0, a value of type int
instantiate(str)  # Returns "", a value of type str

T 一个人就足够了。给定一个 T 类型的值,您将 return 一个 T 类型的值,无论该类型是什么。

def lowercase_if_possible(target: T) -> T:
    if isinstance(target, str):
        return target.lower()
    return target

(请注意,如果没有运行时检查来确定 T 实际是什么, 只有 认为您可以做的是 return 给定值,因为你对价值的了解还不够多,无法用 它实际做任何事情。)

泛型用于定义 包装 任意但明确的类型的 class。