gpt4 book ai didi

python - 如何注释多个返回值的类型?

转载 作者:IT老高 更新时间:2023-10-28 21:45:24 31 4
gpt4 key购买 nike

如何使用类型提示来注释一个返回 Iterable 的函数,该函数总是产生两个值:boolstr?提示 Tuple[bool, str] 很接近,除了它将返回值类型限制为元组,而不是生成器或其他类型的可迭代对象。

我很好奇,因为我想注释一个用于返回多个值的函数 foo(),如下所示:

always_a_bool, always_a_str = foo()

通常像 foo() 之类的函数会执行 return a, b 之类的操作(返回一个元组),但我希望类型提示足够灵活以替换返回的元组带有生成器或列表或其他东西。

最佳答案

你总是返回一个对象;使用 return one, two 只返回一个元组。

所以是的,-> Tuple[bool, str] 是完全正确的。

Tuple 类型允许您指定固定数量 的元素,每个元素都有不同的类型。如果你的函数产生固定个返回值,你真的应该返回一个元组,尤其是当这些值是特定的、不同的类型时。

其他序列类型应该有 one 类型规范用于可变数量的元素,因此 typing.Sequence 不适合这里。另见 What's the difference between lists and tuples?

Tuples are heterogeneous data structures (i.e., their entries have different meanings), while lists are homogeneous sequences. Tuples have structure, lists have order.

Python 的类型提示系统遵循这一理念,目前没有语法来指定固定长度的迭代并在特定位置包含特定类型。

如果您必须指定任何可迭代对象都可以,那么您可以做的最好的事情是:

-> Iterable[Union[bool, str]]

此时调用者可以期待 bool 值和字符串以任意顺序,并且长度未知(0 到无穷大之间的任意位置)。

最后但同样重要的是,从 Python 3.9 开始,您可以使用

-> tuple[bool, str]

而不是 -> Tuple[bool, str];支持类型提示符号 has been added to most standard-library container types (完整列表见PEP 585)。事实上,你也可以从 Python 3.7 开始使用它,只要你为你的模块使用 from __future__ import annotations 编译器开关和一个支持语法的类型检查器。

关于python - 如何注释多个返回值的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40181344/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com