如何在类型提示中指定函数类型?

发布于 2021-01-29 14:55:29

我想在当前的Python 3.5项目中使用类型提示。我的函数应该接收一个函数作为参数。

如何在类型提示中指定类型函数?

import typing

def my_function(name:typing.AnyStr, func: typing.Function) -> None:
    # However, typing.Function does not exist.
    # How can I specify the type function for the parameter `func`?

    # do some processing
    pass

我检查了PEP 483,但在那里找不到函数类型提示。

关注者
0
被浏览
86
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    正如@jonrsharpe在评论中指出的,可以使用以下方法完成typing.Callable

    from typing import AnyStr, Callable
    
    def my_function(name: AnyStr, func: Callable) -> None:
    

    问题是,Callable将其本身翻译为Callable[..., Any]

    一个Callable接受 任意数量的/类型的
    参数,并返回任何类型的值。在大多数情况下,这不是您想要的,因为您几乎可以允许传递任何函数。您也希望对函数参数和返回类型进行提示。

    这就是为什么许多typesintyping重载以支持表示这些额外类型的子脚本的原因。因此,例如,如果您有一个函数sum接受两个ints并返回一个int

    def sum(a: int, b: int) -> int: return a+b
    

    您的注释为:

    Callable[[int, int], int]
    

    也就是说,参数在外部订阅中带有下标,返回类型作为外部订阅中的第二个元素。一般来说:

    Callable[[ParamType1, ParamType2, .., ParamTypeN], ReturnType]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看