我很确定,这之前有人问过,但我不知道该找什么..。
我想输入提示一个“泛型”函数(就像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,但我正在寻找通用方法。
我想我要找的东西与仿制药有关,但我看不出如何使用它们来创建“函数模板”。
发布于 2021-04-19 13:19:42
Python typing有两个部分可以执行通常称为通用程序设计或参数多态性的操作,或者简单地说是“泛型”或“模板”:
typing.TypeVar )的T,以及typing.Generic )的List。两者共同构成完全可参数的类型,如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)https://stackoverflow.com/questions/67121979
复制相似问题