[Python] variabili memoria

Daniele Varrazzo piro a develer.com
Mar 6 Lug 2010 19:28:16 CEST


Ciao Filippo,

On Tue, 6 Jul 2010 18:06:33 +0200, Filippo Dal Bosco -
<Filippo.Dalbosco a libero.it> wrote:

> Pur usando abitualmente linux sto facendo i primi esperimenti con
> PythonWin che al momento mi sembra abbastanza comodo, ma ho il segunte
> problema:
> 
> se lancio in pythonWin il banale script
> ...
> funziona
> 
> se lo modifico (in maniera scorretta)
> ...
> funziona....
> 
> Se chiudo PythonWin e  lo rilancio NON funziona e dice che  Lupo non
> esiste.
> 
> Questo vuol dire che Lupo è rimasto in memoria dopo il primo script
> corretto ed ha permesso al secondo script scorretto di funzionare.
> Infatti per verificare ho aggiunto id(Lupo)
> 
> Questo mi incasina lo studio di Python perchè se  faccio delle prove
> con script leggermente diversi rischio di non capire se realmente
> funzionano o meno.
> 
> Domada c' è un modo di distruggere le variabili?
> Basterebbe mettere alla fine di ogni script la loro distruzione  per
> risolvere il problema.

È un problema dell'ambiente interattivo: la soluzione è quella di non
usare l'ambiente interattivo per testare gli script.

Tieni una shell di fianco al prompt interattivo: quando modifichi lo
script, lancialo da riga di comando e verifica cosa si rompe lì, in un
ambiente sempre pulito. Poi puoi sempre eseguire lo stesso script in
interattivo per giocare con gli elementi creati, ma casomai dopo che l'hai
fatto girare una volta nella shell per verificare che non ci siano errori
banali come una variabile mancante.

Poi più in là questa tecnica verrà sostituita dallo scrivere una unit test
per esercitare le funzioni che usi, ma se per il momento stai solo
studiando e sporchettando, tralascia pure. Metto le mani avanti perché
presto qualcuno ti dirà "USA UNA UNIT TEST!!!". Beh, sì, certo, ma con
calma... anche dopo :)

Comunque, almeno Idle, un comando che "cancella la memoria" ce l'ha:
praticamente la finestra è un processo separato dalla shell sottostante e
con una combinazione di tasti (ctrl-f6? non mi ricordo, comunque c'è nei
menu) permette di killare quella shell e di ripartire fresco, senza
chiudere la finestra. Magari questa feature ce l'ha anche PythonWin.

Se di solito usi Linux, ti suggerisco di lasciar perdere studiare Python
con windows. In Linux il normale prompt interattivo di Python, e ancora
meglio un prompt con gli steroidi tipo iPython, sono molto più semplici da
usare del python.exe fatto girare in cmd.exe, e la shell di linux non
soffre del problema che ricordo avevano sia Idle che PythonWin, ovvero che
sbattono tutto l'output in memoria, bloattando e progressivamente andando
sempre più lenti. E se per errore fai il print di una lista di un milione
di item, non c'è altra soluzione che killarli... questo merita chi
reinventa la console :D

Divertiti, a presto.

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com


Maggiori informazioni sulla lista Python