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

时间:2016-05-23 08:47:14

标签: python python-3.5 type-hinting

我想在我的Python程序中使用Type Hints。如何为复杂的数据结构(如

)创建类型提示
  • 列出字符串
  • 生成器返回整数?

示例

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    

1 个答案:

答案 0 :(得分:20)

使用typing module;它包含泛型,您可以使用类型对象来指定对其内容有约束的容器:

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.Sequencetypes.MutableSequence类型,具体取决于是否你希望能够改变结果。

生成器是特定类型的迭代器,因此typing.Iterator在此处是合适的。如果您的生成器还接受send()值并使用return设置StopIteration值,您也可以使用typing.Generator object

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 – The Theory of Type Hints可能会有所帮助。