我正在试验Python中的类型注释.大多数情况都很清楚,除了那些以另一个函数为参数的函数.

考虑下面的例子:

from __future__ import annotations

def func_a(p:int) -> int:
    return p*5
    
def func_b(func) -> int: # How annotate this?
    return func(3)
    
if __name__ == "__main__":
    print(func_b(func_a))

输出仅打印15.

我应该如何注释func_b( )中的func参数?

推荐答案

您可以将typing模块用于Callable个注释.

Callable注释提供了参数类型列表和返回类型:

from typing import Callable

def func_b(func: Callable[[int], int]) -> int:
    return func(3)

Python-3.x相关问答推荐

海象表达可以放在方括号中而不是括号中吗?

是什么原因导致Pandas=2.1.4和Pandas=1.4.2之间Pandas DataFrame中从Float64到int32的连续列转换方式不同

为什么我无法在django中按月筛选事件?

当我在正则表达式末尾使用斜杠时,为什么会得到不同的结果?

两个 y 轴在零处对齐的 plotly barplot

切片的Python复杂性与元组的星号相结合

使用 python 查找标记的元素

如何在 Python 中 cv2 的窗口标题上动态更新 FPS

如何将元组列表拆分为两个单独的列表?

集合操作:应该只适用于集合,但适用于 dict_keys?

使用正确的数据类型时,使用 Cerberus 验证 JSON 架构会引发错误

为什么 f-strings 比 str() 更快地解析值?

预分配一个无列表

django rest框架中的save()、create()和update()有什么区别?

Python:如何判断一个项目是否被添加到一个集合中,没有 2x(hash,lookup)

Python 3.9.8 使用 Black 并导入 `typed_ast.ast3` 失败

如何调试垂死的 Jupyter Python3 内核?

将 args、kwargs 传递给 run_in_executor

变量类型注解NameError不一致

TypeError: write() 参数必须是 str,而不是字节(Python 3 vs Python 2)