[pyar] Programación funcional en python

Elvio Rogelio Toccalino elviotoccalino en gmail.com
Mie Oct 23 13:21:01 ART 2013


Mismo problema: (x for x in S if P(x)) es tan iterable como [x for x in S
if P(x)] , pero ninguno de los dos tiene el tipo de S.

Una solucion seria asgurarte que el constructor de S tome un iterable, y
hacer algo como: filtered_S = type(S)(x for x in S if P(x))
Y entonces S y filtered_S tienen el mismo tipo... pero eso se lo muestro a
la mitad de la gente que conozco y se me van.

Como decia, no es malo perder el tipo de S. Python favorece el duck typing.
Mi punto es que si bien me gusta mas la expresion como una comprension (que
como una llamada a filter), la llamada a filter es mas flexible para
reforzar el tipado.


El 23 de octubre de 2013 13:16, Daniel Moisset
<dmoisset en machinalis.com>escribió:

> Si queres un iterable usas (x for x in S if P(x))
>
>
> 2013/10/23 Elvio Rogelio Toccalino <elviotoccalino en gmail.com>
>
>> much clearer!
>>
>> Lo que se pierde, sin embargo, es el tipo de S. En python eso mucho no
>> importa, y menos si estas usando una lista (list es el mejor amigo del
>> pythonista). Pero en otro contexto puede ser un fastidio que [x for x in S
>> if P(x)] te devuelve una lista *siempre*, a pesar de que S es otro tipo
>> (pero iterable).
>>
>>
>> El 23 de octubre de 2013 13:13, Cesar Ballardini <cesar en ballardini.com.ar
>> > escribió:
>>
>> la perla de ese artículo es:
>>>
>>> filter(P, S) is almost always written clearer as [x for x in S if P(x)]
>>>
>>> :)
>>>
>>> ¿clearer?
>>>
>>>
>>> El día 21 de octubre de 2013 09:31, Elvio Rogelio Toccalino
>>> <elviotoccalino en gmail.com> escribió:
>>> > El artículo al que hacía referencia antes es "The fate of reduce() in
>>> Python
>>> > 3000" [0]. Espero no haber sido demasiado vago en mi respuesta.
>>> >
>>> > 0: http://www.artima.com/weblogs/viewpost.jsp?thread=98196
>>> >
>>> >
>>> > El 20 de octubre de 2013 14:01, Elvio Rogelio Toccalino
>>> > <elviotoccalino en gmail.com> escribió:
>>> >
>>> >> Python es un lenguaje muy maleable, y lo podes extender hasta donde
>>> se te
>>> >> ocurra.
>>> >>
>>> >> Dicho eso, hay una clara intención del lenguaje de marcar un límite
>>> entre
>>> >> lo funcional y lo procedural. En un texto que ahora no recuerdo donde
>>> >> buscarlo (lo agrego luego) Guido intenta desterrar filter, map y
>>> reduce, con
>>> >> la intención de reemplazarlas por generadores y comprensiones de lista
>>> >> ("list comprehensions", no se si lo estoy traduciendo bien). Si buen
>>> estos
>>> >> artefactos son inspirados de similares construcciones en lenguajes
>>> >> funcionales, en python se intentó que de a poco reemplacen otras
>>> estructuras
>>> >> (antes mencionadas, y que también venían del paradigma funcional).
>>> >>
>>> >> Python se caracteriza por tratar de tomar lo mejor sin casarse con
>>> nadie.
>>> >> Busca maximizar tu poder de expresividad. Por eso te va a servir para
>>> >> introducir/te a los lenguajes funcionales... Para más que una
>>> introducción
>>> >> vas a necesitar un lenguaje funcional :) (recomiendo altamente
>>> Haskell).
>>> >>
>>> >> Btw, ni Guido fue capaz de sacar reduce/filter/map por entero, pero la
>>> >> intención estuvo.
>>> >
>>> >
>>> >
>>> > _______________________________________________
>>> > pyar mailing list pyar en python.org.ar
>>> > http://listas.python.org.ar/listinfo/pyar
>>> >
>>> > PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>> >
>>> > La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> > Argentina - http://www.usla.org.ar
>>>
>>>
>>>
>>> --
>>> It's not enough to teach students to surf the Net, we must teach them to
>>> make waves. My pedagogical theory is relate, create, donate, which
>>> suggests that students work in teams, create ambitious projects and then
>>> donate these to people who can use and build upon them. --Ben Shneiderman
>>> _______________________________________________
>>> pyar mailing list pyar en python.org.ar
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>>
>>
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20131023/abb2f46b/attachment-0001.html>


More information about the pyar mailing list