[Python] l'amore per il pitone

enrico franchi enrico.franchi a gmail.com
Mer 18 Set 2013 18:21:37 CEST


2013/9/18 Manlio Perillo <manlio.perillo a 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:

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.

-- 
.
..: -enrico-
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20130918/a7994eb8/attachment.html>


Maggiori informazioni sulla lista Python