[Python] With... as... per sopprimere NameError

Pietro Battiston me a pietrobattiston.it
Mar 14 Maggio 2013 16:42:47 CEST


Il giorno mar, 14/05/2013 alle 15.03 +0100, Pietro ha scritto:
> Ciao Pietro
> 
> 2013/5/14 Pietro Battiston <me a pietrobattiston.it>:
> > ¹ Per chi si stesse preoccupando per la mia mente malata: voglio potere
> > scrivere codice che lavora sulle colonne di pandas.DataFrame riferendomi
> > direttamente alle colonne con il loro nome, e magari stabilendo un
> > filtering su una condizione prefissata, semplificando _enormemente_ il
> > codice delle analisi econometriche che sviluppo con pandas/statsmodels.
> 
> In pandas già puoi chimare le colonne con il loro nome esattamente
> come dal tuo esempio:
> 
> tot = df["x"] + df["y"]
> 
> se proprio ci tieni a scrivere l'espressione tot = x + y, l'unico modo
> che vedo è:
> 
> x = df['x']
> y =  df['y']
> tot = x + y
> 
> Ma non lo trovo più leggibile...

No, appunto. Lo sarebbe senza la necessità delle prime due righe -
esattamente quello che voglio.


> Non puoi pretendere di definire un dataframe che contiene al suo
> interno delle colonne "x" e "y" e pensare di vedere queste variabili
> come globali, o meglio lo puoi fare ma lo devi fare esplicitamente,
> vedi l'esempio qui sopra (ricorda: Explicit is better than implicit!).
> 

Ma io non le voglio globali! Voglio appunto che esistano solo
all'interno in un (esplicitissimo)

with df.context()
    ....


Dal punto di vista concettuale, non vedo lo scandalo. Sarebbe come dire

with df["x"] as x:
    with df["y"] as y:
        with df["z"] as z:
            ...

... automaticamente per tutte le variabili in "df" (dopo avere
opportunamente definito __enter__ e __exit__ dummy)...

> Secondo me (se ho capito bene il nocciolo della questione) stai
> cercando di forzare il linguaggio a fare qualcosa che di pythonico ha
> poco, nel caso puoi definire un nuovo "linguaggio" che internamente
> utilizza python e le dataframes di pandas utilizzando:
> http://www.dabeaz.com/ply/ se l'obbiettivo è avere qualcosa di più
> semplice per l'utente... ma personalmente in questo caso non sono
> convinto ne valga la pena...

Vedi l'altra mail per mie personalissime stime di quanto "ne valga la
pena"... ma ripeto, non avrei bisogno di ply, mi basterebbe un
"eval()"... e tutta una sovrastruttura - che è quello che voglio evitare
(quella sì, sarebbe pochissimo pythonica).

ciao

Pietro



Maggiori informazioni sulla lista Python