[Python] generatori

2012-01-03 Per discussione Daniele Zambelli
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

2012-01-03 Per discussione Vittorio Zuccala'
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-01-03 Per discussione Marco Beri
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-01-03 Per discussione Marco Mariani
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

2012-01-03 Per discussione Davide Alberani
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

2012-01-03 Per discussione Alberto Abate

 #!/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

2012-01-03 Per discussione Manlio Perillo
-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

2012-01-03 Per discussione Giuseppe Amato
 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

2012-01-03 Per discussione Pietro
 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-01-03 Per discussione Simone Federici
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

2012-01-03 Per discussione Giuseppe Amato
 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

2012-01-03 Per discussione Giovanni Porcari

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