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

Python函数返回多个不同类型返回值时的正确箭头类型注解写法

Python函数返回多个不同类型返回值时的正确箭头类型注解写法

你遇到的问题其实是对Python返回值和类型注解的本质理解有点偏差——Python里函数返回多个值的时候,本质上是返回一个元组,所以你的返回类型注解不能直接用逗号分隔两个列表类型,得把它们包裹在元组类型里才行。

正确的写法示例

首先要确保你导入了需要的类型提示工具,根据Python版本不同写法略有区别:

情况1:Python 3.10及以上版本(支持PEP 604的|语法)

可以直接用内置的list、tuple,并用|代替Union:

def split_x_and_y(data_packet) -> tuple[list[float], list[float | str]]:
    # 你的业务逻辑
    x_values = data_packet.x  # list[float]类型
    y_values = data_packet.y  # list[float | str]类型
    # 其他逻辑
    return x_values, y_values

情况2:Python 3.9及以下版本

需要从typing模块导入List、Tuple、Union:

from typing import List, Tuple, Union

def split_x_and_y(data_packet) -> Tuple[List[float], List[Union[float, str]]]:
    # 你的业务逻辑
    x_values = data_packet.x  # List[float]类型
    y_values = data_packet.y  # List[Union[float, str]]类型
    # 其他逻辑
    return x_values, y_values

为什么原来的写法会报错?

你之前用逗号直接分隔两个返回类型-> list[float], list[Union[float, str]],Python解释器会把它当成函数的多个返回类型注解,但Python的语法里函数只能有一个返回类型注解,这个注解需要准确描述返回值的实际类型——而你返回的x_values, y_values在Python里是一个包含两个元素的元组,所以必须用tuple(或Tuple)来包裹这两个元素的类型。

扩展到返回更多值的情况

如果你的函数需要返回3个、4个不同类型的值,只需要在tuple里依次添加对应的类型即可:
比如返回3个值的情况:

# Python 3.10+
def return_multiple() -> tuple[int, str, list[bool]]:
    return 1, "hello", [True, False]

# Python 3.9及以下
from typing import Tuple, List
def return_multiple() -> Tuple[int, str, List[bool]]:
    return 1, "hello", [True, False]

关于Union的疑问

你说得没错,Union确实不是这里的解决方案——Union是用来表示单个值可能是多种类型之一,而你的场景是返回两个独立的、类型不同的列表,所以用元组来描述这个返回值的结构才是正确的选择,这也和你调用时用my_x, my_y = split_x_and_y(data_packet)的解构逻辑完全匹配。

备注:内容来源于stack exchange,提问作者Gn0my

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:44:10