微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在 Python 中对函数即“函数模板”进行“通用类型提示”?

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

我想键入一个“通用”函数(就像 C++ 中的函数模板)

例如(这个例子完全没有意义——只是为了演示)

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

我想在我有完整类型信息的上下文中使用这个函数,所以我希望我可以去掉任何 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 有两个部分来执行通常称为 generic programmingparametric polymorphism 的操作,或者简称为“泛型”或“模板”:

两者一起形成完全可参数化的类型,例如 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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。