2016-05-23 5 views
16

Chcę używać podpowiedzi typu w moim programie Python. Jak mogę utworzyć Type Wskazówki dla złożonych struktur danych, takich jakJak utworzyć wskazówkę dotyczącą typu, którą moja zwracana lista zawiera ciągi?

  • list z ciągów
  • generator liczb całkowitych powrocie?

Przykład

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  

Odpowiedz

19

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.

Powiązane problemy