[Python] Dubbi su passaggio variabili a funzione

Francesco Guerrieri f.guerrieri a gmail.com
Lun 24 Nov 2008 18:54:21 CET


On Mon, Nov 24, 2008 at 6:24 PM, Massimo Capanni
<massimo.capanni a gmail.com> wrote:
> salve,
>
> scusate ma solo adesso ho potuto leggere le risposte.
> Confesso che sono un po' confuso e provo ad aggiungere
> un alto dettaglio che motivi il mio dubbio (tengo a precisare
> che ho chiaro cosa significhi per rifermiento e per valore
> visto che ci ho sbattuto la testa con Pascal e C :")   )
> ma e' la pratica che mi ha confuso le idee.
>

Ciao,
sulla ml di python in inglese c'è in questi giorni (da almeno due
settimane) un lunghissimo thread sulla modalità di chiamata di Python,
by value, by reference... alla fine direi by name (il famoso
"bigliettino"). Insomma, si tratta di un argomento gettonato.


> Ad esempio, per  esercizio mi sono creato una sorta di lista linkata:
>
> class nodo:
>    def __init__(self, parametro = None, next = None):
>       self.parametri = parametri
>       self.next = None
>
> # creo due nodi
> lista = nodo()
> p = nodo("foffo")
>
> # aggiungo l'ultimo nodo in testa
>
> def add(lista, p):
>     p.next = lista
>     lista.next = p
>     p = l

Forse sono troppo stanco, ma non capisco questo codice, cos'è l??
Dalle prime due righe stai linkando circolarmente i due nodi, poi
assegni al nome locale p il nome (globale) l ..?

prova semplicemente così:

def add ( node, other):
  node.next = other

O anche definendolo come metodo della classe:
>>> class Node(object):
...   def __init__(self, name=None):
...       self.name = name
...       self.next = None
...   def add_child(self, other):
...       self.next = other
...
>>> a = Node("prova")
>>> b = Node("altra prova")
>>> c = Node("terza prova")
>>> a.add_child(b)
>>> b.add_child(c)
>>> a.next.next.name
'terza prova'

e per navigare nella lista (un modo un po' barbaro, a dir la verità :-) ):
>>> while True:
...   a_node = a
...   print a_node.name
...   if a_node.next == None: break
...   else: a_node = a_node.next
...
prova
altra prova
terza prova

Spero di non averti confuso le idee.

ciao,
Francesco


Maggiori informazioni sulla lista Python