繁体   English   中英

python typing.Callable 到底是什么?

[英]what exactly is python typing.Callable?

我见过typing.Callable ,但我没有找到任何有用的文档。 究竟是什么typing.Callable

typing.Callable是您用来指示可调用的类型。 大多数支持()运算符的 python 类型collections.abc.Callable类型。 示例包括函数、 classmethodstaticmethod方法、绑定方法和 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_funcfunc参数的预期类型是“可以调用的东西(例如函数),它需要两个 integer arguments 并返回一个整数”:

typing.Callable[[int, int], int]

为什么首先要打扰类型提示?

使用类型提示使您能够执行类型检查。 如果您使用 IDE (如 PyCharm 或 Visual Studio Code),如果您使用意外类型,您将获得视觉反馈:

PyCharm 中的意外类型标注

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM