Questo è relativo a quanto segue: (In codice Python)Quando dovrei usare una mappa invece di un ciclo For?
for i in object:
doSomething(i)
contro
map(doSomething, object)
Entrambi sono facili da capire, e breve, ma v'è alcuna differenza di velocità? Ora, se doSomething aveva un valore di ritorno, dovevamo controllare che fosse restituito come una lista dalla mappa, e nel ciclo for potremmo creare il nostro elenco o controllarne uno alla volta.
for i in object:
returnValue = doSomething(i)
doSomethingWithReturnValue(returnValue)
contro
returnValue = map(doSomething, object)
map(doSomethingWithReturnValue, returnValue)
Ora, mi sento i due divergono un po '. Le due funzioni doSomethingWithReturnValue possono essere diverse in base a se controllarle al volo mentre attraversiamo il ciclo o se verificarle tutte in una volta alla fine producono risultati diversi. Sembra anche che il ciclo for funzionerebbe sempre, forse più lentamente, dove la mappa funzionerebbe solo in determinati scenari. Certo, potremmo fare contorsioni per fare entrambi i lavori, ma il punto è evitare questo tipo di lavoro.
Quello che sto cercando è uno scenario in cui la funzione di mappatura brilla veramente in confronto a un ben fatto per il ciclo di prestazioni, leggibilità, manutenibilità o velocità di implementazione. Se la risposta è davvero non c'è una grande differenza, quindi mi piacerebbe sapere quando in pratica le persone usano l'una o l'altra o se è davvero completamente arbitraria e imposta dagli standard di codifica in base alla propria istituzione.
Grazie!
È possibile utilizzare la comprensione elenco/dizionario/set o un generatore anziché una mappa, a seconda di cosa fa doSomething(). –
non provate a modificare le prestazioni preliminari. Prenderò sempre l'opzione migliore leggibile. Il runtime successivo mostrerà se le prestazioni di showstopper sono un problema e hai migliorato la velocità o l'utilizzo delle risorse. –