You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中作为函数参数传入的函数应使用什么类型标注?

函数类型参数的正确标注方式

直接写func: function会报NameError,是因为Python命名空间中没有暴露可直接用于类型标注的function名称。标注函数/可调用对象类型的标准方案是使用Callable类型。

基础用法

Callable的标注格式为Callable[[参数1类型, 参数2类型, ...], 返回值类型],不同Python版本的导入路径有区别:

  • Python 3.9及以上版本:从collections.abc模块导入,针对示例中无入参、返回字符串的函数参数,写法如下:
from collections.abc import Callable

def my_func_2(func: Callable[[], str]) -> str: 
    return func()
  • Python 3.8及更早版本:从typing模块导入,标注语法完全一致:
from typing import Callable

def my_func_2(func: Callable[[], str]) -> str: 
    return func()

扩展规则

  • 如果被传入的函数有明确入参,按顺序把参数类型写到方括号的列表位置即可。例如被传入的函数接收两个int参数、返回int结果,标注为Callable[[int, int], int],对应使用示例:
from collections.abc import Callable

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

def run_calc(calc_func: Callable[[int, int], int], x: int, y: int) -> int:
    return calc_func(x, y)
  • 如果不需要约束被传入函数的参数列表,仅约束返回值类型,可以用省略号代替参数列表:Callable[..., str]代表任意入参、返回值为str的可调用对象
  • 不要用types.FunctionType做这类标注:这个类型仅能匹配普通用户自定义函数,无法覆盖内置函数、实现了__call__方法的类实例、functools.partial对象等其他合法可调用对象,适用范围极窄,不符合绝大多数场景的需求。

内容的提问来源于stack exchange,提问作者Alberto Aliberti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 07:42:14