Ultimamente mi sono imbattuto in un modo di usare i mutabili che non avevo mai pensato prima.
Diciamo che hai una comprensione di lista che chiama un metodo e metti il risultato in una lista come la seguente (cose normali):
my_list = [my_object.do_stuff() for my_object in all_objects]
Il metodo do_stuff
esegue alcuni calcoli del ciclo per creare cose diverse, è piuttosto complicato. Per ora va tutto bene, ma si scopre che devi fare ancora parte di quel calcolo, e mettere il risultato in un'altra lista, subito dopo:
my_other_list = [my_object.do_just_a_part_of_stuff() for my_object in all_objects]
Scopri che per evitare di eseguire lo stesso bit di calcolo due volte, puoi utilizzare un mutabile come set
nel seguente modo:
my_set = set()
my_list = [my_object.do_stuff(my_set) for my_object in all_objects]
my_other_variable = do_something_with(my_set)
Come puoi vedere, my_set
è vuoto all'inizio, passato come argomento a do_stuff
che lo modifica in posizione quel tanto che basta mentre esegue i calcoli menzionati sopra, e poi una volta modificato, my_set
viene usato per my_other_list
.
Questo tipo di schema è comunemente considerato una buona pratica? E ha persino un nome? Devo dire che lo trovo abbastanza semplice ed elegante, ma mi sto anche chiedendo se non sia un po 'pericoloso e forse non così facile da leggere quando incontri per la prima volta il codice base.