python - 使用 Python 类型模块指定序列或列表的长度

标签 python type-hinting mypy python-typing

我正在试一试 Python typing 模块。

我知道像下面这样指定 List 的长度是有效的*:

List[float, float, float]   # List of 3 floats <-- NOTE: this is not valid Python

是否有较长列表的简写形式?如果我想将它设置为 10 个 float 怎么办?

List[float * 10]   # This doesn't work.

如果可能的话,这会很方便。


*注意:事实证明,以这种方式向 Sequence[](及其子类)提供多个参数目前在 Python 中是无效的。此外,目前无法以这种方式使用 typing 模块指定 Sequence 长度。

最佳答案

你不能。列表是一种可变的、可变长度 结构。如果您需要固定长度的结构,请改用元组:

Tuple[float, float, float, float, float, float, float, float, float, float]

或者更好的是,使用 named tuple ,它同时具有索引和命名属性:

class BunchOfFloats(NamedTuple):
    foo: float
    bar: float
    baz: float
    spam: float
    ham: float
    eggs: float
    monty: float
    python: float
    idle: float
    cleese: float

对于固定长度的数据结构,列表只是错误的数据类型。

关于python - 使用 Python 类型模块指定序列或列表的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44833822/

相关文章:

rust - 如何明确说明关联类型应该是什么?

函数签名的 Python 3 类型提示

python - 试图让 Pyramid 在 Apache + mod_wsgi 下运行,但它失败了

python - 根据两个数据框列的匹配创建另一列

python - 使用 BeautifulSoup 进行网页抓取 - 纽约马拉松时报

python-3.x - 上下文管理器的类型提示

python - 如何在保留类型的同时重写类 __init__ 方法

flask - 如何使用flask_sqlalchemy正确注释类型?

python - 抽象类和字典的 mypy 问题

python - 转让 numpy 数据的所有权