Devo produrre output con yield o stream.write in Python 3?

0

Sto lavorando su un programma Python 3 che, tra le altre cose, scriverà i dati in file di testo in numerosi formati. Ho una funzione per formato, che genera i dati da scrivere. Vedo due possibili modi di scrivere queste funzioni: una utilizza yield e l'altra utilizza stream.write .

Considera questo stupido esempio, scrivendo solo un numero intero per riga:

def numbers(max):
    for i in range(max):
        yield str(i) + "\n"

with open(file, "w") as f:
    f.writelines(numbers(10))
def numbers(max, stream):
    for i in range(max):
        stream.write(i + "\n")

with open(file, "w") as f:
    numbers(10, f)

Trovo che la prima versione abbia una funzione migliore (ad esempio un parametro in meno), ma forse il codice che la consuma è un po 'più complicata. Ma trovo anche più facile testare, dal momento che non ho bisogno di costruire una classe di flusso fittizio che catturi l'output.

Qualcuno di questi è migliore dell'altro o mi sto semplicemente bloccando su una decisione non importante? Le mie priorità sono la produzione di codice leggibile e pignolo.

    
posta Anders 05.01.2018 - 11:21
fonte

1 risposta

3

Dato che utilizzerai una forma di write per scrivere in entrambi i casi, la vera domanda è "Devo separare l'iterazione dall'output o no?"

In generale, sì, dovresti separare le preoccupazioni se sono di natura diversa da quelle del calcolo e dell'I / O . Se continui a lavorare con questo codice, incontrerai quasi inevitabilmente situazioni in cui devi stampare qualcosa di diverso da "tutti gli elementi nel iterable" o fare qualcosa di diverso dalla stampa con gli elementi. Pertanto, avere funzioni separate per questi due non è sovra-ingegnerizzazione, è semplicemente un buon factoring.

    
risposta data 05.01.2018 - 11:25
fonte

Leggi altre domande sui tag