繁体   English   中英

如何在 Python 中对函数(即“函数模板”)进行“泛型类型提示”?

[英]How to do 'generic type hinting' of functions (i.e 'function templates') in Python?

我很确定,以前有人问过这个问题,但我不知道要搜索什么..

我想键入提示“通用”function(如 C++ 中的 function 模板)

例如(这个例子根本没有意义——它只是为了演示)

def foo(fn: Callable[Any, Any], args: Any) -> Any:
    return fn(args)

我想在我有完整类型信息的上下文中使用这个 function ,所以我希望我可以摆脱任何Any

def bar() -> int:
    func: Callable[[str], int] = lambda arg: len(arg)
    return foo(func, "Hurz")

当然,一种方法是将foo显式转换为(Callable[[str], int], str) -> int ,但我正在寻找通用方法。

我想我正在寻找的内容与generics 有关,但我看不到如何使用它们来创建“功能模板”。

Python typing有两个部分来做通常所说的泛型编程参数多态性,或者简称为“泛型”或“模板”:

两者一起形成完全可参数化的类型,例如List[T] 由于函数是内置的, def关键字自然地定义了泛型类型——只需要TypeVar

只需为签名中所需的每个类型占位符定义一个TypeVar

from typing import TypeVar, Callable

T = TypeVar('T')
R = TypeVar('R')

def foo(fn: Callable[[T], R], args: T) -> R:
    return fn(args)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM