2017-05-12 1 views
4

Ich habe einige Generator:Wie Generator dekoriert implementieren

def my_gen(): 
    while True: 
     #some code 
     yield data_chunk 

ich eine Funktion haben, macht wich einige Manipulationen mit Datenformat

def my_formatting_func(data_chunk): 
    #some code 
    return formated_data_chunk 

Was ist der kürzeste Weg Generator Wich zu schaffen erzeugt data_chunks formatiert von my_formatting_func ohne Änderung my_gen?

Antwort

7

Unter der Annahme, Python 3.x und dass der Generator keine Argumente nehmen (letzteres ist trivial hinzugefügt werden):

def wrapper(generator): 
    def _generator(): 
     return map(my_formatting_func, generator()) 
    return _generator 

@wrapper 
def my_gen(): 
    # do stuff 

Für 2.x verwenden itertools.imap anstelle von map.

+0

Ich habe eine Frage zu Python 2.x. Imap mit Generator als zweites Argument funktioniert extrem langsam für mich. Warum? –

+0

@IvanIvanov, hängt davon ab, was 'my_formatting_func' tut. Wenn es etwas Zeit kostet, ist es kein Wunder, dass es langsam ist. – ForceBru