[Python] saluti e prima domanda sulle list comprhension

Manlio Perillo manlio_perillo a libero.it
Dom 27 Gen 2008 17:51:59 CET


Java ha scritto:
> Salve a tutti, sono nuovo di questa mailing list e del pythone più in 
> generale!
> 
> Prima di fare la domanda, preannuncio che mi sono occupato di questa 
> cosa per un paio di giorni, e che essendo completamente niubbo con il 
> python potrei aver fatto qualche cavolata :-D
> 
> Veniamo alla nota dolente, devo fare un progetto per 
> l'università(costruire una rete sociale di video di youtube) che 
> comporta anche la scrittura di un piccolo crawler. Ho pensato di usare 
> python sostanzialmente perché non lo conoscevo, e così approfitto 
> dell'esame per imparare un nuovo linguaggio...
> 
> Senza entrare troppo nei dettagli, ho fatto un thread che si occupa di 
> fare il crawling di una pagina iterando per in base alla profondità di 
> crawling. Cioè se questa è 1 "parso" (ARGH!) solo la pagina iniziale, se 
> vale 2 parso anche tutti i link in essa e così via...
> 
> ecco il codice:
> 
> def run ( self ):
>        #  lista temporanea
>        temp = []
>        # all'inizio la lista results contine l'url iniziale
>        results = [self.start_url]
>        #cast della profondita' in intero poiché la leggo da input
>        p = int(self.profondita)
>        # finche' la profondita' e' maggiore di zero, intero sulla lista 
> temp eseguendo il
>        # parsing degli url trovati in essa
>        while(p > 0):
>            print "Thread lanciato con profondita: ", p
>            # copio i risultati attuali dentro la lista temp
>            # all'inizio conterrà solo un url
>            temp = results            
>            print "ecco la lista TEMP:"
>            print  temp
>            [results.extend(self.parseUrl(video)) for video in temp]
>            print "finito ciclo while \n\n\n" # qua non ci arrivo mai :-(
>            p-=1
> 
> il problema è che in ogni caso non esce mai dalla list comphrension, 
> eppure la lista temp contiene un solo url!
> In pratica continua a ciclare come se ogni volta eseguisse temp = 
> results, ma non capisco il perché...
> 
> qualche idea?
> 

temp e results fanno riferimento allo stesso oggetto, e quindi quello 
che stai in realtà facendo è qualcosa tipo:

l = [1]
[l.append(i) for i in l]



Nella list comphrension la lista è valutata in modo lazy, quindi hai un 
ciclo infinito.




Manlio Perillo


More information about the Python mailing list