我可以使用 Typing.Callable 类型自动注释函数吗?如何?

lin*_*k89 5 python python-typing

假设我们为回调定义一个类型,如下所示:

CallbackFn = Callable[[str, str, int, int], None]
Run Code Online (Sandbox Code Playgroud)

当我想要实现回调函数并使用外部工具对其进行类型检查时CallbackFn,我必须显式注释类型:

def my_callback(s1: str, s2: str, i1: int, i2: int) -> None:
  ...
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使用定义的类型提示来CallbackFn注释函数(例如def my_callback(s1,s2,i1,i2) as CallbackFn:)以避免显式注释工作?

Joe*_*ley 0

有点,但不推荐,或者漂亮。例如,

my_callback: CallbackFn = lambda s1, s2, i1, i2: <do the thing>
Run Code Online (Sandbox Code Playgroud)

或者如果您正在使用高阶函数

my_callback: CallbackFn = compose(f, g)
Run Code Online (Sandbox Code Playgroud)

对于某些人来说composef并且g

您当然也可以公开以标准风格编写的 API,如下所示

my_callback: CallbackFn = _my_callback

def _my_callback(s1: str, s2: str, i1: int, i2: int) -> None: ...
Run Code Online (Sandbox Code Playgroud)

所有这些示例都违背了使用over命名函数的Python 风格指南。deflambda