Python 3如何实现类似C语言typedef定义函数类型的功能?
Python 3实现函数类型别名(类似C语言typedef)的方法
Python完全支持给函数类型定义别名,和C语言的函数指针typedef作用一致,方便复用函数类型签名、提升类型提示可读性。
基础实现
Python 3.10及以上版本
可以用TypeAlias显式标注类型别名,语义更清晰:
from typing import Any, Callable, TypeAlias, Optional # 定义CasterFunc为 接收1个Any类型参数、返回Any类型的函数 类型别名 CasterFunc: TypeAlias = Callable[[Any], Any]
Python 3.9及更早版本
不需要额外导入TypeAlias,直接赋值即可,静态类型检查工具(mypy、pyright等)可以正常识别:
from typing import Any, Callable, Optional CasterFunc = Callable[[Any], Any]
使用示例
定义完别名后,你原来的函数可以直接替换类型声明:
def map(item: Any, ctx: Optional[Any] = None, caster: CasterFunc = lambda x: x): # 函数原有逻辑 pass
补充说明
- 你可以根据实际业务调整函数签名的参数、返回值类型,比如需要定义接收
int、返回str的转换器类型,直接修改为CasterFunc: TypeAlias = Callable[[int], str]即可。 - 和C语言的typedef类似,该类型别名主要用于静态类型校验,Python运行时不会做强制类型检查,如果需要运行时校验可以额外添加类型判断逻辑。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

