Используйте typing
модуль; он содержит универсальные объекты типа, которые можно использовать для указания контейнеров с ограничениями на их содержимое:
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 — Theory of Type Hints< /a> может быть полезно.
person
Martijn Pieters
schedule
23.05.2016