Il giorno mar, 14/05/2013 alle 15.05 +0200, Manlio Perillo ha scritto: > Il 14/05/2013 14:27, Pietro Battiston ha scritto: > > [...] > > Allora: supponi che ci sia "df", un oggetto Dataframe, che contiene > > varie colonne (=variabili). Ora, supponi che "df" contenga una colonna > > "x" e una "y". Al momento per averne la somma devo fare > > > > df["x"] + df["y"] > > > > io voglio poter fare semplicemente > > > > x + y > > > > all'interno di un dato contesto ("with df.my_context(): ..."). > > > > > > (Finché non riesco a fare una cosa del genere, mi vergogno a mostrare il > > mio codice econometrico in Python ai miei colleghi, che utilizzano > > linguaggi più brutti ma ad hoc e quindi enormemente meno verbosi...) > > > > Cosa usano: Common Lisp?
No, cose come R, STATA, Gretl (o meglio Hansl, il suo linguaggio di programmazione)... linguaggi che vanno (alcuni più, altri meno) bene per l'analisi statistica, e con cui poi impazzisci quando cerchi di fare qualsiasi altra cosa (discorso leggermente meno vero per R). A scanso di equivoci: non sto dicendo che siano linguaggi che consentono una gerarchia di scoping manipolabili; sono semplicemente linguaggi in cui le variabili _sono_ colonne di un dataframe, che è unico ed implicito. Insomma, come se io mi prendessi il codice python e ci facessi un grosso "eval" mettendo nei locals quello che mi pare... solo che, appunto, vorrei evitare (per non perdere l'evidenziazione della sintassi in un editor di testo... e per non dovermi vergognare ancora di più a mostrare il mio codice in giro!!). > Common Lisp con la macro with-slots di CLOS è l'unica soluzione più > espressiva che mi viene in mente, per quello che vuoi fare. Potrei sbagliarmi, ma mi pare che "exec()" in Python 3 faccia esattamente tutto ciò... ... peccato che ovviamente come soluzione faccia schifo (sempre per il solito problemino - i delimitatori di scope sarebbero i delimitatori di stringhe). Però dal punto di vista concettuale, se passi come secondo argomento ad "exec()" una sorta di dizionario che quando non ha una key la cerca prima nel (suo) locals() e poi nel (suo) globals(), non vedo la differenza... > E' > addirittura possibile assegnare gli attributi/slots, e non solo leggere > come vuoi fare tu. > ... ah, a me piacerebbe anche assegnare eh... ma diciamo che è di importanza secondaria. > Quello che vuoi fare credo non sia possibile in Python, e francamente > non vedo in che modo aumenti l'espressività.. > Ignoro se ci sia una definizione univoca di espressività, quindi non sono certo di quale sia la tua risposta al tuo dubbio. Di certo ridurrerebbe enormemente la quantità di codice che è necessario scrivere per fare una qualsiasi analisi econometrica (se guardo quella che sto facendo ora, credo che sarebbe di un fattore 2, per non parlare della maggiore semplicità di manutenzione). Nota che stiamo parlando di un'applicazione pseudo-scripting (al limite un comando solo, magari monouso), non di applicazioni in cui "basterebbe ristrutturare un attimo il codice per risolvere il problema". ciao Pietro _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python