在Python中,我有以下函数:
T = TypeVar("T")
def handle_func(x: int, func: Callable[[int], T]) -> T:
return func(x)
我可以这样使用它:
handle_func(1, lambda x: x + 1)
handle_func(1, lambda x: x == 1)
当我运行 MyPy 时,一切都很好。
但是...如何为
func
添加默认值?
当我这样做时:
def handle_func(x: int, func: Callable[[int], T] = lambda x: x + 1) -> T:
return func(x)
并运行 MyPy 我得到:
error: Incompatible default for argument "func" (default has type "Callable[[int], int]", argument has type "Callable[[int], T]") [assignment]
error: Incompatible return value type (got "int", expected "T") [return-value]
但是当默认值不存在时它就可以工作......我怎样才能输入这个?我理解错了什么?
处理此问题的一种方法是将两种形式分开:
int
;和您可以将其作为重载:
from typing import Callable, overload, TypeVar
T = TypeVar("T")
@overload
def handle_func(x: int) -> int:
...
@overload
def handle_func(x: int, func: Callable[[int], T]) -> T:
...
def handle_func(x, func = lambda x: x + 1):
return func(x)