2015-11-25 15 views
8

yeni Python 3.5 yeni özelliği kullanmak istediğiniz tür imzalarla ima tip izin verdiğini göz önüne alındığında, ama tam olarak aşağıdaki yapıya sahip bir işlev açıklama nasıl bilmiyorum:Python'da jeneratörler hangi tip imzayı taşır?

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

doğru imza nedir ?

cevap

9

vardır bir 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

send_type ve return_type nedir? – Drew

+0

@Drew: 'generator.send()' kullanarak bir jeneratöre değerler gönderebilirsiniz. 'send_type', bu değerlerin türünü belirtir. 3.3 ve üstü, bir jeneratör 'return some_expression'unu kullandığında, döndürülen değer bir' StopIteration' istisnasına sarılır ve bir 'get from from 'ifadesinin dönüş değeri olur ([bir alt-generatöre delege] (https://docs.python.org/3/whatsnew/3.3.html#pep-380-syntax-for-delegating-to-a-subgenerator), bakın ['get from'] (https://docs.python.org/ 3/başvuru/expressions.html # verimi-ifadeler)); 'return_type' parametresi, bunun üreteceği türü belirtir. –

İlgili konular