[Python] generatori
Mi sono imbattuto in un comportamento di Python che mi ha sorpreso e che mi ha confermato nell'idea che i generatori per me sono un po' un mistero. Una funzione prende come argomento una sequenza e ne stampa gli elementi: def mostra(sequenza): for e in sequenza: print(e) mostra((1, 3, 5, 7, 9)) 1 3 5 7 9 Funziona. Creo un generatore: cubi = (n*n*n for n in range(5)) Anche di questo posso stampare gli elementi: for n in cubi: print(n) 0 1 8 27 64 Ma se lo passo alla funzione non viene stampato niente: mostra(cubi) A me il comportamento sembra strano e incoerente, cosa mi sfugge? grazie per l'attenzione. -- Daniele www.fugamatematica.blogspot.com giusto! nel verso forse è perché non guardiamo le cose Quando non ci capiamo, ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] generatori
Ti ridei che l'unica cosa che sfugge è un paio di parentesi :-) Prova così: mostra((n*n*n for n in range(5))) 2012/1/3 Daniele Zambelli daniele.zambe...@gmail.com Mi sono imbattuto in un comportamento di Python che mi ha sorpreso e che mi ha confermato nell'idea che i generatori per me sono un po' un mistero. Una funzione prende come argomento una sequenza e ne stampa gli elementi: def mostra(sequenza): for e in sequenza: print(e) mostra((1, 3, 5, 7, 9)) 1 3 5 7 9 Funziona. Creo un generatore: cubi = (n*n*n for n in range(5)) Anche di questo posso stampare gli elementi: for n in cubi: print(n) 0 1 8 27 64 Ma se lo passo alla funzione non viene stampato niente: mostra(cubi) A me il comportamento sembra strano e incoerente, cosa mi sfugge? grazie per l'attenzione. -- Daniele www.fugamatematica.blogspot.com giusto! nel verso forse è perché non guardiamo le cose Quando non ci capiamo, ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python -- Blog:http://zuccala.blogspot.com/ Twitter: http://twitter.com/#!/VittorioZuccala/ Buzz: http://www.google.com/profiles/nathanvi#buzz ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] generatori
2012/1/3 Daniele Zambelli daniele.zambe...@gmail.com A me il comportamento sembra strano e incoerente, cosa mi sfugge? Secondo me ti sfugge che hai consumato il generatore: cubi = (n*n*n for n in range(5)) for n in cubi: print n ... 0 1 8 27 64 for n in cubi: print n ... Ciao. Marco. -- http://beri.it/ - Un blog http://beri.it/i-miei-libri/ - Qualche libro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] generatori
2012/1/3 Daniele Zambelli daniele.zambe...@gmail.com Anche di questo posso stampare gli elementi: for n in cubi: print(n) 0 1 8 27 64 Mentre lo fai, esaurisci il generatore. Ma se lo passo alla funzione non viene stampato niente: mostra(cubi) A me il comportamento sembra strano e incoerente, cosa mi sfugge? Chiama la mostra(cubi) prima di fare il loop + print ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] generatori
On Tue, Jan 3, 2012 at 09:39, Daniele Zambelli daniele.zambe...@gmail.com wrote: Ma se lo passo alla funzione non viene stampato niente: Non stampa nulla se lo passi alla tua funzione _dopo_ che ci hai già ciclato sopra una volta, arrivando quindi in fondo. :-P A quel punto cubi.next() solleverà StopIteration, e quindi il ciclo si ferma. Se hai bisogno di fare cose buffe con gli iteratori, vedi il modulo itertools. -- Davide Alberani davide.alber...@gmail.com [PGP KeyID: 0x465BFD47] http://www.mimante.net/ ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] R: Elenco strade italiane per comune
#!/usr/bin/python from pygeocoder import Geocoder, GeocoderResult from time import sleep def frange(start,end,step): return map(lambda x: x*step, range(int(start*1./step),int(end*1./step))) results = Geocoder.geocode('Galatina') geometry = results.raw[0]['geometry'] max_lat = geometry['bounds']['northeast']['lat'] min_lat = geometry['bounds']['southwest']['lat'] max_lon = geometry['bounds']['northeast']['lng'] min_lon = geometry['bounds']['southwest']['lng'] print min_lat, max_lat strade = [] i = 0 step = 0.001 for lat in frange(min_lat, max_lat, step): for lon in frange(min_lon, max_lon, step): indirizzo = Geocoder.latlng_to_address(lat, lon) # sleep(5) if indirizzo not in strade: strade.append(str(lat)+'_'+str(lon)+'_'+indirizzo) i += 1 print 'Count: ',i strade.sort() for s in strade: print s Sto sperimentando una soluzione da pazzi: infatti funziona parzialmente ;-)) Come da codice sopra stavo usando pygeocoder per fare una scansione dei 'bounds' cioè del rettangolo sulle google maps con longitudine e latitudine. Usando poi la funzione *Geocoder.latlng_to_address(lat, lon) *cioè una forma di reverse_geocode, ottengo il nome della strada che salvo nella lista strade. Il problema è che le api di google consentono di effettuare solo 2500 query al giorno, quindi si ottiene un bel OVER_QUERY_LIMIT Avete idea su come bypassare il limite? Ho letto che forse con la funzione sleep potrei rallentare le query, ma per oggi non posso provarlo... Ho scaricato qualche file in formato osm (openstreetmap), ma non mi sembrano molto comodi e affidabili per i nomi delle strade; la soluzione offline non mi piace molto. * * ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] generatori
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 Il 03/01/2012 09:39, Daniele Zambelli ha scritto: Mi sono imbattuto in un comportamento di Python che mi ha sorpreso e che mi ha confermato nell'idea che i generatori per me sono un po' un mistero. Come ti hanno già detto, i generatori non hanno memoria. A me il comportamento sembra strano e incoerente, cosa mi sfugge? Se sai come funzionano, non è strano ne incoerente. I generatori offrono anche altri comportamenti bizzarri: specialmente se hai generatori nidificati con side-effect. Ciao Manlio -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk8DHQAACgkQscQJ24LbaUR/ngCfSag4qnaNqKLOBeuK+g9wq96i /V0An2k/8Ur9wbIVEa7tN8whE3uZ+HMk =9hR6 -END PGP SIGNATURE- ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] R: Elenco strade italiane per comune
Il problema è che le api di google consentono di effettuare solo 2500 query al giorno, quindi si ottiene un bel OVER_QUERY_LIMIT Se non ricordo male bisogna acquistare una sorta di licenza. Altrimenti dovresti provare ad utilizzare un parser html per spulciare le query che ritorna viamichelin nelle ricerche. Fai una bella injection: http://www.viamichelin.it/web/Mappe-Piantine?strMerged=RomastrCountry=612strAddress=viae poi ti leggi la query che ritorna e la converti. E' rozzo ma aggira molti limiti -- -- Giuseppe Amato e-mail: giuam...@gmail.com ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] R: Elenco strade italiane per comune
Ho scaricato qualche file in formato osm (openstreetmap), ma non mi sembrano molto comodi e affidabili per i nomi delle strade; la soluzione offline non mi piace molto. In che senso non sono affidabili? in che formato lo vorresti? un json con: provincia, comune, vie? magari parlandone con la comunity di osm lo possiamo fare... grazie per i feedback... pietro ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] R: Elenco strade italiane per comune
2012/1/3 Giuseppe Amato giuam...@gmail.com Fai una bella injection: http://www.viamichelin.it/web/Mappe-Piantine?strMerged=RomastrCountry=612strAddress=viae poi ti leggi la query che ritorna e la converti. REST? http://dev.viamichelin.com/ ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] R: Elenco strade italiane per comune
REST? http://dev.viamichelin.com/ Ancora meglio! Non lo sapevo e non immaginavo nemmeno che viamichelin mettesse a disposizione le API. Ottima notizia! -- -- Giuseppe Amato e-mail: giuam...@gmail.com ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python
Re: [Python] Elenco strade italiane per comune
Il giorno 03/gen/2012, alle ore 21:59, Simone Federici ha scritto: REST? http://dev.viamichelin.com/ A dire il vero per usarle devi accettare delle condizioni per cui ti impegni a NON usare i loro dati per creare dei database locali. E dopo 45 giorni di prova il servizio è a pagamento. G ___ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python