![](/img/trans.png)
[英]How to register typing.Callable with Python @singledispatch?
[英]what exactly is python typing.Callable?
我见过typing.Callable
,但我没有找到任何有用的文档。 究竟是什么typing.Callable
?
typing.Callable
是您用来指示可调用的类型。 大多数支持()
运算符的 python 类型collections.abc.Callable
类型。 示例包括函数、 classmethod
、 staticmethod
方法、绑定方法和 lambda。
总之,任何带有__call__
方法(这就是()
的实现方式)的东西都是可调用的。
从 Python 3.11 开始,您无需显式使用typing.Callable
。 PEP 677引入了隐式 tuple-with-arrow 语法,因此像Callable[[int, str], list[float]]
这样的东西可以更直观地表示为(int, str) -> list[float]
。
请参阅 此处的文档。
简短版本, Callable
是一种类型提示,指示可以调用的 function或其他 object。
考虑下面的一个简单示例。 bar
参数是一个可调用的 object,它接受两个 int 作为参数并返回一个 int。
>>> def foo(bar: Callable[[int, int], int], a: int, b: int) -> int:
... return bar(a, b)
...
>>> foo(int.__add__, 4, 5)
9
>>> class A:
... def __call__(self, a, b):
... return a * b
...
>>> foo(A(), 6, 7)
42
>>> foo(lambda x, y: x - y, 8, 3)
5
>>>
typing
模块用于类型提示:
该模块为类型提示提供运行时支持。
该文档提供了此示例:
def greeting(name: str) -> str:
return 'Hello ' + name
在 function
greeting
中,参数名称应为str
类型,返回类型为str
。 子类型被接受为 arguments。
typing.Callable
假设您要定义一个 function,它接受两个整数并对它们执行某种操作,返回另一个 integer:
def apply_func(a: int, b: int, func) -> int:
return func(a, b)
因此, apply_func
中func
参数的预期类型是“可以调用的东西(例如函数),它需要两个 integer arguments 并返回一个整数”:
typing.Callable[[int, int], int]
使用类型提示使您能够执行类型检查。 如果您使用 IDE (如 PyCharm 或 Visual Studio Code),如果您使用意外类型,您将获得视觉反馈:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.