Io sostengo un progetto che ha una definizione di funzione simile a questo:La variabile `.0` inaccessibile in` locals() `influisce sulla memoria o sulle prestazioni?
def f(a, (b1, b2), c):
print locals()
Durante il debug del codice ho scoperto che una chiave .1
apparso in locals()
, con il valore (b1, b2)
. Un rapido controllo ha rivelato che una definizione di funzione come la seguente:
def f((a1, a2)):
print locals()
avrà una chiave .0
in locals()
con il valore (a1, a2)
. Sono rimasto sorpreso da questo comportamento, ma non sono riuscito a trovare alcuna informazione nella documentazione di Python.
Le mie domande sono: queste variabili posizionali altrimenti inaccessibili influenzano la memoria o le prestazioni? Sono documentati ovunque? Quale è il loro scopo?
Il progetto in questione è feedparser, che è basato su SAX e potrebbe potenzialmente contenere dozzine o centinaia di chiamate di funzione che potrebbero essere interessate da questo comportamento.
Questo stile di disfaupazione automatica della tupla negli argomenti è stato esplicitamente rimosso in Python 3 e, se ricordo correttamente, a quel tempo era descritto come un incidente della grammatica. Non è certamente uno stile che mi piace vedere. –
Buono a sapersi! Hai ragione, lo strumento '2to3' sostituisce automaticamente la sintassi' (b1, b2) 'con il nome della variabile' xxx_todo_changeme'. Tuttavia, hai un link che potrebbe aiutare a spiegare questo comportamento o un link riguardante la rimozione esplicita? –
@ Kurt McKee [PEP 3113 - Rimozione del disimpegno dei parametri della tupla] (http://www.python.org/dev/peps/pep-3113/). –