2015-11-25 5 views
8

Da der neue Python 3.5 ermöglicht die neue Funktion verwenden, mit Typ-Signaturen Ich will geben anspielend, aber ich weiß nicht, wie voll eine Funktion mit der folgenden Struktur mit Anmerkungen versehen zu:Welche Signatur haben Generatoren in Python?

def yieldMoreIfA(text:str): 
    if text == "A": 
     yield text 
     yield text 
     return 
    else: 
     yield text 
     return 

Was die korrekte Signatur ist ?

Antwort

9

Es gibt eine Generator[yield_type, send_type, return_type] type:

from typing import Generator 

def yieldMoreIfA(text: str) -> Generator[str, None, None]: 
    if text == "A": 
     yield text 
     yield text 
     return 
    else: 
     yield text 
     return 
+0

Was send_type ist, und return_type? – Drew

+0

@Drew: Sie können Werte mit 'generator.send()' an einen Generator senden. 'send_type' gibt den Typ dieser Werte an. In Python 3.3 oder höher, wenn ein Generator 'return some_expression' verwendet, wird der zurückgegebene Wert in eine 'StopIteration'-Ausnahme gehüllt und wird zum Rückgabewert eines' yield from'-Ausdrucks (bei [Delegierung an einen Subgenerator] (https://docs.python.org/3/whatsnew/3.3.html#pep-380-syntax-for-delegating-to-a-subgenerator), siehe ['yield from'] (https://docs.python.org/ 3/reference/expressions.html # yield-expressions)); Der Parameter 'return_type' gibt an, welcher Typ erzeugt wird. –

Verwandte Themen