2013/9/18 enrico franchi <enrico.fran...@gmail.com> > > > > 2013/9/18 Manlio Perillo <manlio.peri...@gmail.com> > >> Peccato che flatten non sia disponibile in itertools, e non credo sia >> implementabile in modo elegante. >> >> > Dipende cosa intendi con "elegante". A me questa non dispiace: > > Niente male, concordo.
> import collections as c > > def flatten(obj): > """ > >>> list(flatten(1)) > [1] > >>> list(flatten([1, 2, 3])) > [1, 2, 3] > >>> list(flatten([1, [2, 3], [4, 5], 6])) > [1, 2, 3, 4, 5, 6] > """ > stack = [obj] > while stack: > current = stack.pop() > if isinstance(current, c.Sequence): > stack.extend(reversed(current)) > else: > yield current > > > if __name__ == '__main__': > import doctest > doctest.testmod() > > Facilmente adattabile per una flatmap alla ruby. Non e testata molto (come > si puo' vedere), ma sembra ragionevole. > > Si, avrei potuto usare ricorsione esplicita invece dello stack, ma poi si > sarebbe complicata la gestione del generatore, temo. > Poi possiamo girarci intorno: Python supporta alcuni costrutti funzionali > ma quello che e' e rimane e' un linguaggio *imperativo* ad oggetti. > In pratica le parti veramente funzionali di python girano intorno ad > itertools e functools e a poche features del core (LC). > > Insomma, Python e' un linguaggio che *sceglie* di avere degli statement e > non di essere tutto un'espressione. Vorra' pur dire qualcosa. > > Non so se c'e' un messaggio nella bottiglia, comunque a me personalmente interessano i modelli misti FP+OO (in nessun ordine particolare), non quelli puri. Ciao Giuliano -- Piergiuliano Bossi Blog: http://thinkingbox.wordpress.com/ Twitter: http://twitter.com/thinkingbox (English) Twitter: http://twitter.com/scatolapensante (Italiano) Google+: https://plus.google.com/u/0/108187981162465525118
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python