首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中对函数(即“函数模板”)进行“泛型类型提示”?

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

Stack Overflow用户
提问于 2021-04-16 08:45:09
回答 1查看 133关注 0票数 1

我很确定,这之前有人问过,但我不知道该找什么..。

我想输入提示一个“泛型”函数(就像C++中的函数模板)

(这个例子一点意义都没有--只是为了演示)

代码语言:javascript
运行
复制
def foo(fn: Callable[Any, Any], args: Any) -> Any:
    return fn(args)

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

代码语言:javascript
运行
复制
def bar() -> int:
    func: Callable[[str], int] = lambda arg: len(arg)
    return foo(func, "Hurz")

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

我想我要找的东西与仿制药有关,但我看不出如何使用它们来创建“函数模板”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-19 13:19:42

Python typing有两个部分可以执行通常称为通用程序设计参数多态性的操作,或者简单地说是“泛型”或“模板”:

两者共同构成完全可参数的类型,如List[T]。由于函数是内置的,所以def关键字自然定义了泛型类型--只需要TypeVar

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

代码语言:javascript
运行
复制
from typing import TypeVar, Callable

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

def foo(fn: Callable[[T], R], args: T) -> R:
    return fn(args)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67121979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档