如何创建类型提示以表明我返回的列表包含字符串?

问题描述 投票:0回答:2

我想在我的 Python 程序中使用类型提示。如何为复杂的数据结构创建类型提示,例如

  • 带字符串的列表
  • 返回整数的生成器?

示例

def names() -> list:
    # I would like to specify that the list contains strings?
    return ['Amelie', 'John', 'Carmen']

def numbers():
    # Which type should I specify for `numbers()`?
    for num in range(100):
        yield num    
python python-typing
2个回答
28
投票

使用

typing
模块;它包含 generics,可用于指定对其内容进行约束的容器的类型对象:

import typing

def names() -> typing.List[str]:  # list object with strings
    return ['Amelie', 'John', 'Carmen']

def numbers() -> typing.Iterator[int]:  # iterator yielding integers
    for num in range(100):
        yield num

根据您如何设计代码以及如何使用

names()
的返回值,您还可以在此处使用
types.Sequence
types.MutableSequence
类型,具体取决于您是否期望能够改变结果。

生成器是迭代器的特定类型,因此

typing.Iterator
在这里是合适的。如果您的生成器也接受
send()
值并使用
return
设置
StopIteration
值,您也可以使用
typing.Generator
对象

def filtered_numbers(filter) -> typing.Generator[int, int, float]:
    # contrived generator that filters numbers; returns percentage filtered.
    # first send a limit!
    matched = 0
    limit = yield
    yield  # one more yield to pause after sending
    for num in range(limit):
        if filter(num):
            yield num
            matched += 1
    return (matched / limit) * 100

如果您不熟悉类型提示,那么PEP 483 – 类型提示理论可能会有所帮助。


4
投票

从 python 3.9 开始,您可以简单地使用以下语法。不再需要

import typing
模块。

def names() -> list[str]:
© www.soinside.com 2019 - 2024. All rights reserved.