Python3 运算符模块的类型提示
Python3 type hint for operator module
如何为应该是运算符函数的参数编写类型提示?例如,看这个函数:
import operator
from typing import Dict, Tuple
def func(thresholds: Dict[str, Tuple[operator, float]] = None):
if thresholds is None:
thresholds = {"height": (operator.lt, 0.7), "width": (operator.gt, 0.1)}
pass
当我尝试 运行 我的代码时,我得到:
TypeError: Tuple[t0, t1, ...]: each t must be a type. Got <module 'operator' from ...>.
编辑:我意识到 operator 是一个模块,而不是一种类型,而且我正在寻找的参数是该模块中的一个函数。我正在尝试查看是否有任何方法可以让用户知道我希望将运算符函数作为参数。是在文档字符串中解释的唯一方法吗?
operator
是一个模块,而不是 class 或类型。你想要做的是制作一个可以满足传递给 func
的函数的类型提示。如果我们要从头开始写 operator.lt
,它可能看起来像这样:
from numbers import Number
def le(a: Number, b: Number) -> bool:
...
使用 Callable
类型我们可以写成:
Callable[[Number, Number], bool]
把这些放在一起你会得到这样的东西:
import operator
from typing import Dict, Tuple, Callable, Optional
from numbers import Number
Operator = Callable[[Number, Number], bool]
OperatorDict = Dict[str, Tuple[Operator, float]]
def func(thresholds: Optional[OperatorDict] = None) -> None:
if thresholds is None:
thresholds = {"height": (operator.lt, 0.7), "width": (operator.gt, 0.1)}
pass
如何为应该是运算符函数的参数编写类型提示?例如,看这个函数:
import operator
from typing import Dict, Tuple
def func(thresholds: Dict[str, Tuple[operator, float]] = None):
if thresholds is None:
thresholds = {"height": (operator.lt, 0.7), "width": (operator.gt, 0.1)}
pass
当我尝试 运行 我的代码时,我得到:
TypeError: Tuple[t0, t1, ...]: each t must be a type. Got <module 'operator' from ...>.
编辑:我意识到 operator 是一个模块,而不是一种类型,而且我正在寻找的参数是该模块中的一个函数。我正在尝试查看是否有任何方法可以让用户知道我希望将运算符函数作为参数。是在文档字符串中解释的唯一方法吗?
operator
是一个模块,而不是 class 或类型。你想要做的是制作一个可以满足传递给 func
的函数的类型提示。如果我们要从头开始写 operator.lt
,它可能看起来像这样:
from numbers import Number
def le(a: Number, b: Number) -> bool:
...
使用 Callable
类型我们可以写成:
Callable[[Number, Number], bool]
把这些放在一起你会得到这样的东西:
import operator
from typing import Dict, Tuple, Callable, Optional
from numbers import Number
Operator = Callable[[Number, Number], bool]
OperatorDict = Dict[str, Tuple[Operator, float]]
def func(thresholds: Optional[OperatorDict] = None) -> None:
if thresholds is None:
thresholds = {"height": (operator.lt, 0.7), "width": (operator.gt, 0.1)}
pass