如何为具有特定关键字参数的函数添加类型提示?
How do you add type hints for a function with specific keyword arguments?
我想将类型提示添加到输入(也是函数)具有特定关键字参数的高阶函数。
我的代码看起来类似于:
def foo(a: int, b: int) -> int:
...
def bar(c: Callable[[int, int], int]) -> int:
return c(a=1, b=2) # getting a mypy error: Unexpected keyword argument "a"
在示例中,我希望能够从 bar
的函数范围调用 c
,并且我希望能够假设它具有关键字参数 a
并且b
.
我明白为什么 mypy 会在这里抱怨,因为一些其他具有不同签名的函数可以作为参数传递给 b
,然后 c(a=1, b=2)
将不再起作用。但似乎应该有一种方法可以在类型提示中添加关键字参数名称,以明确保证函数 c
接受名称为 a
和 b
.[=20= 的参数]
有 mypy extension 用于扩展 Callable
from typing import Callable
from mypy_extensions import (Arg, DefaultArg, NamedArg,
DefaultNamedArg, VarArg, KwArg)
def foo(a: int, b: int) -> int:
...
def bar(c: Callable[[Arg(int, 'a'), Arg(int , 'b')], int]) -> int:
return c(b=1, a=2) # no issues
我想将类型提示添加到输入(也是函数)具有特定关键字参数的高阶函数。
我的代码看起来类似于:
def foo(a: int, b: int) -> int:
...
def bar(c: Callable[[int, int], int]) -> int:
return c(a=1, b=2) # getting a mypy error: Unexpected keyword argument "a"
在示例中,我希望能够从 bar
的函数范围调用 c
,并且我希望能够假设它具有关键字参数 a
并且b
.
我明白为什么 mypy 会在这里抱怨,因为一些其他具有不同签名的函数可以作为参数传递给 b
,然后 c(a=1, b=2)
将不再起作用。但似乎应该有一种方法可以在类型提示中添加关键字参数名称,以明确保证函数 c
接受名称为 a
和 b
.[=20= 的参数]
有 mypy extension 用于扩展 Callable
from typing import Callable
from mypy_extensions import (Arg, DefaultArg, NamedArg,
DefaultNamedArg, VarArg, KwArg)
def foo(a: int, b: int) -> int:
...
def bar(c: Callable[[Arg(int, 'a'), Arg(int , 'b')], int]) -> int:
return c(b=1, a=2) # no issues