我想在我的 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
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 – 类型提示理论可能会有所帮助。
从 python 3.9 开始,您可以简单地使用以下语法。不再需要
import typing
模块。
def names() -> list[str]: