Il seguente codice non funziona, suppongo, perché la gente del posto() variabile all'interno la comprensione farà riferimento al blocco nidificato in cui viene valutata la comprensione:con gente del posto() all'interno di dizionario comprensione
def f():
a = 1
b = 2
list_ = ['a', 'b']
dict_ = {x : locals()[x] for x in list_}
ho potuto utilizzare globals()
invece, e sembra funzionare, ma che potrebbe venire con alcuni problemi aggiuntivi (ad esempio, se ci fosse una variabile da un ambito circostante che ha lo stesso nome).
C'è qualcosa che renderebbe il dizionario che utilizza le variabili esattamente nell'ambito della funzione f
?
Nota: sto facendo questo perché ho molte variabili che mi piacerebbe mettere in un dizionario più tardi, ma non voglio complicare il codice scrivendo dict_['a']
invece a
nel frattempo.
non ho pensato di questo! E perché è male usare i locali() come questo? Non sto usando nulla di non documentato, vero? – max
Non è non documentato, ma l'uso di 'locals()' può far scattare il compilatore a generare codice meno che ottimale per la funzione a cui viene fatto riferimento. Ad esempio, se il compilatore determina che può ottimizzare l'uso di alcune variabili temporanee (forse alcune * altre * variabili nella funzione non correlate al tuo dizionario), potrebbe non essere in grado di farlo se viene utilizzato 'locals()' all'interno della funzione. Inoltre, evitando di creare un dizionario prima, ti stai ripetendo con (1) l'assegnazione di ogni variabile e (2) i nomi nell'elenco. –
Quindi sono bloccato: http://stackoverflow.com/questions/4067463/alternative-to-locals-in-printing-a-table-with-a-header – max