如何自动为Python函数f2的参数x标注f1的返回类型?
问题
现有以下Python函数:
def f1(a:int, b:int): return (a,b) def f2(x): a, b = x return a
我想自动给f2的参数x加上类型提示,让它和f1的返回类型保持一致(也就是tuple[int, int])。目前我是手动标注的:
from typing import Tuple def f1(a:int, b:int): return (a,b) def f2(x:Tuple[int,int]): a, b = x return a
但每次修改f1的返回类型时,必须同步修改f2的类型提示(比如把f1的b改成str类型,f2的x就得改成Tuple[int, str])。有没有更便捷的实现方式?比如类似下面这种写法:
def f1(a:int, b:int): return (a,b) def f2(x:output_type_of[f1]): return x[1]
解决方案
当然有,下面几种方法都能实现自动关联,不用手动同步修改:
1. Python 3.10+ 用 ReturnType + typeof
Python 3.10及以上版本内置了ReturnType,可以直接获取函数的返回类型:
from typing import ReturnType def f1(a:int, b:int): return (a,b) def f2(x: ReturnType[typeof(f1)]): a, b = x return a
这样只要f1的返回类型变了,f2的参数类型会自动跟着更新。
2. 兼容低版本用 typing_extensions.ReturnType
如果你的Python版本低于3.10,先安装typing_extensions包,然后用它提供的ReturnType:
from typing_extensions import ReturnType def f1(a:int, b:int): return (a,b) def f2(x: ReturnType[typeof(f1)]): a, b = x return a
3. 自定义类型别名(兼容性最好)
也可以先给f1的返回类型定义一个别名,然后在f2里直接用这个别名:
from typing import Tuple F1Return = Tuple[int, int] def f1(a:int, b:int) -> F1Return: return (a,b) def f2(x: F1Return): a, b = x return a
这种方式所有支持类型提示的Python版本都能用,修改的时候只需要更新F1Return的定义就行,不用改两个地方。
内容的提问来源于stack exchange,提问作者jingbin
相关产品推荐
相关产品推荐

