Python中如何为函数参数与返回值标注functiontype类型?
Python 函数类型标注的正确姿势
在Python里,要是你想给函数的参数、返回值标注函数类型,不用纠结怎么导入<class 'function'>,有两种常用的方法:
方法1:用typing.Callable(Python 3.5及以上可用)
Callable是专门用来标注可调用对象(包括函数)的类型提示工具,灵活性很强。如果不需要精确限定参数类型,就用Callable[..., 返回值类型]的写法:
from typing import Callable def wrapper(func: Callable[..., int]) -> Callable[..., int]: return func
要是你想精确指定参数的类型,比如标注一个接受两个整数参数、返回整数的函数,就这么写:
from typing import Callable def wrapper(func: Callable[[int, int], int]) -> Callable[[int, int], int]: return func
方法2:用types.FunctionType(直接对应函数类)
如果你确实要直接引用函数的类本身,可以从types模块导入FunctionType:
from types import FunctionType def wrapper(func: FunctionType) -> FunctionType: return func
不过这种方法不太推荐用于类型提示,因为它只能识别标准的函数对象,像那些实现了__call__方法的类实例(也是可调用的)就覆盖不到,而Callable的适用范围要广得多。
额外说明
- 直接写
function肯定不行,因为它不是Python的内置类型名称,你用type()看到的<class 'function'>是函数对象的类型,但这个类没有直接暴露成全局变量,必须从types模块导入FunctionType才能引用。 - 类型提示主要是为了让代码更易懂、方便静态检查,优先用
typing.Callable才是更稳妥的选择。
内容的提问来源于stack exchange,提问作者Dimon Agon
相关产品推荐
相关产品推荐

