LinuxLudus: Python-domande varie
John Leach
john.leach@syger.com
Gio 22 Maggio 2008 15:08:03 CEST
Ciao Valerio
Valerio Pachera wrote:
> 2008/5/22 John Leach <john.leach@syger.com>:
>> Concordo con quello che ha detto molto concisamente Federico. Oggi
>> giorno direi che lista == array == vector, tanto quanto map == hash ==
>> dictionary == associated array.
>
> Perfetto, hai già risposto alla seconda domanda che avevo :)
Era facile indovinare...
>> Una variable e' solo un 'etichetta' ad un valore, che in realta' (almeno
>> per Python, come Ruby, e C#) e' sempre un oggetto. Quindi
>>
>> nome = "carlo"
>> nomi = ["carlo","valerio",christian"]
>>
>> Sia nome sia nomi sono variabili che 'puntano' ad *un solo valore*, una
>> stringha nel primo caso, ed una lista nella seconda.
>
> Bene bene, quindi una lista è un puntatore alle aree di memoria (se
> così si può dire).
Fermo li! Non rendere le cose piu' difficile di quanto sono. I concetti
basiliare sono importantissimo, ma basialiare. L'errore era mio, non
avrei dovuto parlare di puntatori (anche se ho solo detto punta). Per
utilizare un istanze di una classe (cioe' un oggetto) dovremmo darlo un
nome. Punto e basta. Una lista e' un oggeto che io decido di chiamare
lista, o pippo, o todo. Idem qualunque altro oggetto, un numero,
stringha, mappa, ecc. Pensa ad un alias. Italia e un alias per una massa
di terra, circondato da mare, ed una linea geo-politico.
> Questo esempio penso chiarisca il concetto di puntatore (lo scrivo per
> chiarirmi le idee io, ma potrebbe interessare qualcun'altro).
>
> #code=utf-8
> lista1 = range (10)
> lista2 = lista1
Beh la realta' e' un po piu' semplice. lista1 (un nome) e' un alias del
oggetto range(10). lista2 (un nome) e' un alias del nome lista1, che e'
un alias del oggetto range(10) - cioe' anche lista2 e' un alias *dello
stesso oggetto* range(10)
> lista1.remove (5)
> print lista2
>
> #restituisce [0, 1, 2, 3, 4, 6 , 7 ,9] nonostante l'operazione di
> rimozione sia stata fatta su lista1 e non lista2.
Proprio perche lista1 e lista2 erano due alias per lo stesso oggetto.
> Al contrario, con le "semplici" variabili, il contenuto della
> variabile viene passato come valore e non come riferimento
> (terminologia basic)
>
> #code=utf-8
> var1= "ciao"
> var2 = var1
>
> var1="hallo"
> print var2
>
> #stampa "ciao" e non "hallo"
No No No No No. Non c'e' un contrario, e' lo stesso sistema di prima.
Due alias allo stesso oggetto, solo adesso l'oggetto e' una stringa.
Ma poi hai deciso di usare il nome var1 per essere l'alias di un altro
oggetto (un'altra stringa "hallo"). Mentre var1 continua ad essere
l'alias dello stringa "ciao".
Non e' stato cambiato il concetto a fatto, hai semplicemente usato un
esempio un po' piu' complesso.
> E' possibile passare i valori per riferimento alle variabili in python?
Se Python e' come Ruby, non ha senso il concetto di "valore per
riferimento". Byebye Basic. E meglio pensare che il nome del parametro
*e'* l'oggetto, cioe' l'alias al oggetto, e basta. Un po' come accettare
che il modello Newtoniano spiega la gravita'. Non e' proprio vero, come
ha spiegato Einstein, ma basta per quello che serve a noi.
>> La lista
>> naturalmente contiene altri oggetti, me se vogliamo essere pedantico,
>> anche la stringha (perche' contiene caratteri). Non per nulla che si usa
>> la stessa sintasse in questi casi per estrarre un elemento:
>>
>> primo_carattere = nome[0]
>> primo_nome = nomi[0]
>
> confermo:
>
> #code=utf-8
> for lettera in "parola":
> print lettera
>
> stampa
> p
> a
> r
> o
> l
> a
>
>> FYI (anche se lo sai ;-)
>> http://groups.google.com/group/it.comp.lang.python/topics
>
> Non lo sapevo, vado a darci un'occhiata.
>
+1 per il John ;-)
>> A volte pero` e` _obbligatorio_ che una sequenza sia immutabile, e
> l'esempio classico sono le chiavi dei dizionari
>
> Ok, pensavo potesse avere a che fare con le performance, ad esempio
> occupare meno memoria, invece è una questione di concetto.
>
> Grazie!
Prego.
John
Maggiori informazioni sulla lista
linuxludus