Za pomocą typing
module; zawiera rodzajowych typu obiektów można użyć do określenia pojemników z ograniczeniami na ich zawartość:
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
W zależności od tego, jak zaprojektować swój kod i jak chcesz używać wartości zwracanej names()
, można również użyć typy types.Sequence
i types.MutableSequence
, w zależności od tego, czy spodziewamy się, że uda się zmutować wynik.
Generator jest specyficznym typem iteratora, więc typing.Iterator
jest odpowiednie tutaj. Jeśli generator akceptuje również send()
wartości i używa return
ustawić wartość StopIteration
można użyć typing.Generator
object too:
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
jeśli jesteś nowy typ sugerując, następnie PEP 483 – The Theory of Type Hints może być pomocne.