从python版本3.5开始,您可以使用类型提示来指示函数期望的参数类型。我发现这些类型提示对于文档目的非常有价值,所以我尝试尽可能多地使用它们。它们还有助于linter,因此可以定期将我从代码更改引入的错误中解救出来。
例如,在我的代码中,我有一些函数将零参数函数作为参数。 E.g:
def onReady(f: Callable[[], Any]) -> None:
...
或者
def checkIfReady(f: Callable[[], Bool]) -> None:
...
我想做的是制作类似的别名(下面的代码不是有效的python):
Action[A] = Callable[[], A]
然后我可以缩短上面论点的类型:
def onReady(f: Action[Any]) -> None:
...
我知道我可以为特定实例创建一个类型别名,例如:
ActionBool = Callable[[], bool]
我知道NewType
模块中typing
的存在,但这些似乎都没有推广到更高阶的类型。
答案 0 :(得分:2)
我想我找到了最简单的解决方案。根据{{3}},这是有效的:
T = TypeVar('T') # or TypeVar('T', int, float, bool, str)
Action = Callable[[], T]
def onReady(f: Action[Any]) -> None:
pass