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

Manlio Perillo manlio.perillo a gmail.com
Mar 14 Maggio 2013 16:49:42 CEST


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Il 14/05/2013 16:37, Pietro Battiston ha scritto:
> [...]
>>
>> 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).
> 
> [...]
> 
>> 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ò...
> 

No, è molto diverso.

Con Common Lisp puoi modificare il comportamento del linguaggio a
compile time, così come con Python lo puoi fare a run time.

Nel tuo caso, il problema è che in Python la gestione delle variabili
locali di una funzione viene "decisa" a compile time, e quindi non puoi
fare quello che vuoi.

> [...]
>> 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).
> 

Sicuramente la differenza tra:

   d.x + d.y
e

   x + y

è che la seconda è più corta, però:

 1) Non ci sono differenze nello sforzo da fare nella manutenzione
 2) La prima è piu esplicita, perchè vedi subito a quale "namespace" x
    ed y appartengono


Nota che non ci sono problemi a fare in modo da avere

  d.x + d.y

invece di

  d["x"] + d["y"]

se d è un dizionario.



Ciao  Manlio
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAlGSTwYACgkQscQJ24LbaUStAQCgjuycYsGUMJg7KbWJrkRXmucB
J3EAmwVKXvctbywPh25Yw53draiPCUEG
=Nu15
-----END PGP SIGNATURE-----


Maggiori informazioni sulla lista Python