簡體   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