{"id":377,"date":"2024-11-23T19:11:01","date_gmt":"2024-11-23T19:11:01","guid":{"rendered":"https:\/\/equipomedios.com\/blog\/?p=377"},"modified":"2024-10-18T19:12:32","modified_gmt":"2024-10-18T19:12:32","slug":"funciones-de-orden-superior-python","status":"publish","type":"post","link":"https:\/\/equipomedios.com\/blog\/funciones-de-orden-superior-python\/","title":{"rendered":"Funciones de orden superior | Python"},"content":{"rendered":"<h1>Funciones de orden superior<\/h1>\n<p>Las funciones de Python pueden tomar funciones como par\u00e1metros y devolver funciones como resultado. Una funci\u00f3n que hace ambas cosas o alguna de ellas se llama funci\u00f3n de orden superior.<\/p>\n<div id=\"filter\" class=\"section\"><span id=\"python-fun-filter\"><\/span><\/p>\n<h2>filter()<\/h2>\n<p>La funci\u00f3n\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">filter()<\/span><\/code>\u00a0es una funci\u00f3n la cual toma un\u00a0<span class=\"std std-ref\">predicado<\/span>\u00a0y una lista y devuelve una lista con los elementos que satisfacen el predicado. Tal como su nombre indica\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">filter()<\/span><\/code>\u00a0significa filtrar, ya que a partir de una lista o iterador y una funci\u00f3n condicional, es capaz de devolver una nueva colecci\u00f3n con los elementos filtrados que cumplan la condici\u00f3n.<\/p>\n<p>Todo esto podr\u00eda haberse logrado tambi\u00e9n usando\u00a0<span class=\"std std-ref\">listas por comprensi\u00f3n<\/span>\u00a0que usaran\u00a0<em>predicados<\/em>. No hay ninguna regla que diga cuando usar la funci\u00f3n\u00a0<span class=\"std std-ref\">map()<\/span>\u00a0o la funci\u00f3n\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">filter()<\/span><\/code>\u00a0en lugar de las\u00a0<span class=\"std std-ref\">listas por comprensi\u00f3n<\/span>, simplemente debe decidir que es m\u00e1s legible dependiendo del contexto.<\/p>\n<p>Por ejemplo, suponga que tiene una lista varios n\u00fameros y requiere filtrarla, quedando \u00fanicamente con los n\u00fameros m\u00faltiples de 5, eso seria as\u00ed:<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"c1\"># Primero declaramos una funci\u00f3n condicional<\/span>\r\n<span class=\"go\">def multiple(numero):<\/span>\r\n<span class=\"go\"># Comprobamos si un numero es m\u00faltiple de cinco<\/span>\r\n<span class=\"go\">if numero % 5 == 0:<\/span>\r\n<span class=\"go\">    # S\u00f3lo devolvemos True si lo es<\/span>\r\n<span class=\"go\">    return True<\/span>\r\n\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">numeros<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">,<\/span> <span class=\"mi\">23<\/span><span class=\"p\">,<\/span> <span class=\"mi\">50<\/span><span class=\"p\">,<\/span> <span class=\"mi\">33<\/span><span class=\"p\">]<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"nb\">filter<\/span><span class=\"p\">(<\/span><span class=\"n\">multiple<\/span><span class=\"p\">,<\/span> <span class=\"n\">numeros<\/span><span class=\"p\">)<\/span>\r\n<span class=\"go\">[5, 10, 50]<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>Si ejecuta el filtro obtiene una lista los n\u00fameros m\u00faltiples de 5. Por tanto cuando utiliza la funci\u00f3n\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">filter()<\/span><\/code>\u00a0tiene que enviar una funci\u00f3n condicional, para esto, puede utilizar una funci\u00f3n an\u00f3nima\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">lambda<\/span><\/code>, como se muestra a continuaci\u00f3n:<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">numeros<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">,<\/span> <span class=\"mi\">23<\/span><span class=\"p\">,<\/span> <span class=\"mi\">50<\/span><span class=\"p\">,<\/span> <span class=\"mi\">33<\/span><span class=\"p\">]<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"nb\">filter<\/span><span class=\"p\">(<\/span><span class=\"k\">lambda<\/span> <span class=\"n\">numero<\/span><span class=\"p\">:<\/span> <span class=\"n\">numero<\/span><span class=\"o\">%<\/span><span class=\"mi\">5<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span><span class=\"p\">,<\/span> <span class=\"n\">numeros<\/span><span class=\"p\">)<\/span>\r\n<span class=\"go\">[5, 10, 50]<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>As\u00ed, en una sola l\u00ednea ha definido y ejecutado el filtro utilizando una funci\u00f3n condicional an\u00f3nima y devolviendo una lista de n\u00fameros.<\/p>\n<div id=\"filtrando-objetos\" class=\"section\">\n<h3>Filtrando objetos<\/h3>\n<p>Sin embargo, m\u00e1s all\u00e1 de filtrar listas con valores simples, el verdadero potencial de la funci\u00f3n\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">filter()<\/span><\/code>\u00a0sale a relucir cuando usted necesita filtrar varios objetos de una lista.<\/p>\n<p>Por ejemplo, dada una lista con varias personas, a usted le gustar\u00eda filtrar \u00fanicamente las cuales son menores de edad:<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"k\">class<\/span> <span class=\"nc\">Persona<\/span><span class=\"p\">:<\/span>\r\n<span class=\"gp\">...<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"k\">def<\/span> <span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"n\">edad<\/span><span class=\"p\">):<\/span>\r\n<span class=\"gp\">... <\/span>        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span> <span class=\"o\">=<\/span> <span class=\"n\">nombre<\/span>\r\n<span class=\"gp\">... <\/span>        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">edad<\/span> <span class=\"o\">=<\/span> <span class=\"n\">edad<\/span>\r\n<span class=\"gp\">...<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"k\">def<\/span> <span class=\"fm\">__str__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\r\n<span class=\"gp\">... <\/span>        <span class=\"k\">return<\/span> <span class=\"s2\">\"<\/span><span class=\"si\">{}<\/span><span class=\"s2\"> de <\/span><span class=\"si\">{}<\/span><span class=\"s2\"> a\u00f1os\"<\/span><span class=\"o\">.<\/span><span class=\"n\">format<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">edad<\/span><span class=\"p\">)<\/span>\r\n<span class=\"gp\">...<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">personas<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"Leonardo\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">38<\/span><span class=\"p\">),<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"Ana\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">33<\/span><span class=\"p\">),<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"Sabrina\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">12<\/span><span class=\"p\">),<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"Enrique\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">3<\/span><span class=\"p\">)<\/span>\r\n<span class=\"gp\">... <\/span><span class=\"p\">]<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">menores<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">filter<\/span><span class=\"p\">(<\/span><span class=\"k\">lambda<\/span> <span class=\"n\">persona<\/span><span class=\"p\">:<\/span> <span class=\"n\">persona<\/span><span class=\"o\">.<\/span><span class=\"n\">edad<\/span> <span class=\"o\">&lt;<\/span> <span class=\"mi\">18<\/span><span class=\"p\">,<\/span> <span class=\"n\">personas<\/span><span class=\"p\">)<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"k\">for<\/span> <span class=\"n\">menor<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">menores<\/span><span class=\"p\">:<\/span>\r\n<span class=\"go\">print menor<\/span>\r\n<span class=\"go\">Sabrina de 12 a\u00f1os<\/span>\r\n<span class=\"go\">Enrique de 3 a\u00f1os<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>Este es un ejemplo sencillo, con el cual usted puede realizar filtrados con objetos, de forma amigable.<\/p>\n<\/div>\n<\/div>\n<div id=\"map\" class=\"section\"><span id=\"python-fun-map\"><\/span><\/p>\n<h2>map()<\/h2>\n<p>La funci\u00f3n\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">map()<\/span><\/code>\u00a0toma una funci\u00f3n y una lista y aplica esa funci\u00f3n a cada elemento de esa lista, produciendo una nueva lista. Va a ver su definici\u00f3n de tipo y como se define.<\/p>\n<p>Esta funci\u00f3n trabaja de una forma muy similar a\u00a0<span class=\"std std-ref\">filter()<\/span>, con la diferencia que en lugar de aplicar una condici\u00f3n a un elemento de una lista o secuencia, aplica una funci\u00f3n sobre todos los elementos y como resultado se devuelve un lista de n\u00fameros doblado su valor:<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"k\">def<\/span> <span class=\"nf\">doblar<\/span><span class=\"p\">(<\/span><span class=\"n\">numero<\/span><span class=\"p\">):<\/span>\r\n<span class=\"go\">return numero*2<\/span>\r\n\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">numeros<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">,<\/span> <span class=\"mi\">23<\/span><span class=\"p\">,<\/span> <span class=\"mi\">50<\/span><span class=\"p\">,<\/span> <span class=\"mi\">33<\/span><span class=\"p\">]<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"nb\">map<\/span><span class=\"p\">(<\/span><span class=\"n\">doblar<\/span><span class=\"p\">,<\/span> <span class=\"n\">numeros<\/span><span class=\"p\">)<\/span>\r\n<span class=\"go\">[4, 10, 20, 46, 100, 66]<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>Usted puede simplificar el c\u00f3digo anterior usando una funci\u00f3n\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">lambda<\/span><\/code>\u00a0para substituir la llamada de una funci\u00f3n definida, como se muestra a continuaci\u00f3n:<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"nb\">map<\/span><span class=\"p\">(<\/span><span class=\"k\">lambda<\/span> <span class=\"n\">x<\/span><span class=\"p\">:<\/span> <span class=\"n\">x<\/span><span class=\"o\">*<\/span><span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"n\">numeros<\/span><span class=\"p\">)<\/span>\r\n<span class=\"go\">[4, 10, 20, 46, 100, 66]<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>La funci\u00f3n\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">map()<\/span><\/code>\u00a0se utiliza mucho junto a expresiones\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">lambda<\/span><\/code>\u00a0ya que permite evitar escribir\u00a0<span class=\"std std-ref\">bucles for<\/span>.<\/p>\n<p>Adem\u00e1s se puede utilizar sobre m\u00e1s de un objeto iterable con la condici\u00f3n que tengan la misma longitud. Por ejemplo, si requiere multiplicar los n\u00fameros de dos listas:<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">a<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"mi\">3<\/span><span class=\"p\">,<\/span> <span class=\"mi\">4<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">]<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">b<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"mi\">6<\/span><span class=\"p\">,<\/span> <span class=\"mi\">7<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">9<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">]<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"nb\">map<\/span><span class=\"p\">(<\/span><span class=\"k\">lambda<\/span> <span class=\"n\">x<\/span><span class=\"p\">,<\/span><span class=\"n\">y<\/span> <span class=\"p\">:<\/span> <span class=\"n\">x<\/span><span class=\"o\">*<\/span><span class=\"n\">y<\/span><span class=\"p\">,<\/span> <span class=\"n\">a<\/span><span class=\"p\">,<\/span><span class=\"n\">b<\/span><span class=\"p\">)<\/span>\r\n<span class=\"go\">[6, 14, 24, 36, 50]<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>E incluso usted puede extender la funcionalidad a tres listas o m\u00e1s:<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">a<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"mi\">3<\/span><span class=\"p\">,<\/span> <span class=\"mi\">4<\/span><span class=\"p\">,<\/span> <span class=\"mi\">5<\/span><span class=\"p\">]<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">b<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"mi\">6<\/span><span class=\"p\">,<\/span> <span class=\"mi\">7<\/span><span class=\"p\">,<\/span> <span class=\"mi\">8<\/span><span class=\"p\">,<\/span> <span class=\"mi\">9<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">]<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">c<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"mi\">11<\/span><span class=\"p\">,<\/span> <span class=\"mi\">12<\/span><span class=\"p\">,<\/span> <span class=\"mi\">13<\/span><span class=\"p\">,<\/span> <span class=\"mi\">14<\/span><span class=\"p\">,<\/span> <span class=\"mi\">15<\/span><span class=\"p\">]<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"nb\">map<\/span><span class=\"p\">(<\/span><span class=\"k\">lambda<\/span> <span class=\"n\">x<\/span><span class=\"p\">,<\/span><span class=\"n\">y<\/span><span class=\"p\">,<\/span><span class=\"n\">z<\/span> <span class=\"p\">:<\/span> <span class=\"n\">x<\/span><span class=\"o\">*<\/span><span class=\"n\">y<\/span><span class=\"o\">*<\/span><span class=\"n\">z<\/span><span class=\"p\">,<\/span> <span class=\"n\">a<\/span><span class=\"p\">,<\/span><span class=\"n\">b<\/span><span class=\"p\">,<\/span><span class=\"n\">c<\/span><span class=\"p\">)<\/span>\r\n<span class=\"go\">[66, 168, 312, 504, 750]<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<div id=\"mapeando-objetos\" class=\"section\">\n<h3>Mapeando objetos<\/h3>\n<p>Evidentemente, siempre que la funci\u00f3n\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">map()<\/span><\/code>\u00a0la utilice correctamente podr\u00e1 mapear una serie de objetos sin ning\u00fan problema:<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"k\">class<\/span> <span class=\"nc\">Persona<\/span><span class=\"p\">:<\/span>\r\n<span class=\"gp\">...<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"k\">def<\/span> <span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"n\">edad<\/span><span class=\"p\">):<\/span>\r\n<span class=\"gp\">... <\/span>        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span> <span class=\"o\">=<\/span> <span class=\"n\">nombre<\/span>\r\n<span class=\"gp\">... <\/span>        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">edad<\/span> <span class=\"o\">=<\/span> <span class=\"n\">edad<\/span>\r\n<span class=\"gp\">...<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"k\">def<\/span> <span class=\"fm\">__str__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\r\n<span class=\"gp\">... <\/span>        <span class=\"k\">return<\/span> <span class=\"s2\">\"<\/span><span class=\"si\">{}<\/span><span class=\"s2\"> de <\/span><span class=\"si\">{}<\/span><span class=\"s2\"> a\u00f1os\"<\/span><span class=\"o\">.<\/span><span class=\"n\">format<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">edad<\/span><span class=\"p\">)<\/span>\r\n<span class=\"gp\">...<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">personas<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"Leonardo\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">38<\/span><span class=\"p\">),<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"Ana\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">33<\/span><span class=\"p\">),<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"Sabrina\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">12<\/span><span class=\"p\">),<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"Enrique\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">3<\/span><span class=\"p\">)<\/span>\r\n<span class=\"gp\">... <\/span><span class=\"p\">]<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"k\">def<\/span> <span class=\"nf\">incrementar<\/span><span class=\"p\">(<\/span><span class=\"n\">p<\/span><span class=\"p\">):<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"n\">p<\/span><span class=\"o\">.<\/span><span class=\"n\">edad<\/span> <span class=\"o\">+=<\/span> <span class=\"mi\">1<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"k\">return<\/span> <span class=\"n\">p<\/span>\r\n<span class=\"gp\">...<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">personas<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">map<\/span><span class=\"p\">(<\/span><span class=\"n\">incrementar<\/span><span class=\"p\">,<\/span> <span class=\"n\">personas<\/span><span class=\"p\">)<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"k\">for<\/span> <span class=\"n\">persona<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">personas<\/span><span class=\"p\">:<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"nb\">print<\/span> <span class=\"n\">persona<\/span>\r\n<span class=\"gp\">...<\/span>\r\n<span class=\"go\">Leonardo de 39 a\u00f1os<\/span>\r\n<span class=\"go\">Ana de 34 a\u00f1os<\/span>\r\n<span class=\"go\">Sabrina de 13 a\u00f1os<\/span>\r\n<span class=\"go\">Enrique de 4 a\u00f1os<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>Claro que en este caso tiene que utilizar una funci\u00f3n definida porque no necesitamos actuar sobre la instancia, a no ser que usted se tome la molestia de rehacer todo el objeto:<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"k\">class<\/span> <span class=\"nc\">Persona<\/span><span class=\"p\">:<\/span>\r\n<span class=\"gp\">...<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"k\">def<\/span> <span class=\"fm\">__init__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"n\">edad<\/span><span class=\"p\">):<\/span>\r\n<span class=\"gp\">... <\/span>        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span> <span class=\"o\">=<\/span> <span class=\"n\">nombre<\/span>\r\n<span class=\"gp\">... <\/span>        <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">edad<\/span> <span class=\"o\">=<\/span> <span class=\"n\">edad<\/span>\r\n<span class=\"gp\">...<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"k\">def<\/span> <span class=\"fm\">__str__<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"p\">):<\/span>\r\n<span class=\"gp\">... <\/span>        <span class=\"k\">return<\/span> <span class=\"s2\">\"<\/span><span class=\"si\">{}<\/span><span class=\"s2\"> de <\/span><span class=\"si\">{}<\/span><span class=\"s2\"> a\u00f1os\"<\/span><span class=\"o\">.<\/span><span class=\"n\">format<\/span><span class=\"p\">(<\/span><span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"bp\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">edad<\/span><span class=\"p\">)<\/span>\r\n<span class=\"gp\">...<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">personas<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"Leonardo\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">38<\/span><span class=\"p\">),<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"Ana\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">33<\/span><span class=\"p\">),<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"Sabrina\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">12<\/span><span class=\"p\">),<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"Enrique\"<\/span><span class=\"p\">,<\/span> <span class=\"mi\">3<\/span><span class=\"p\">)<\/span>\r\n<span class=\"gp\">... <\/span><span class=\"p\">]<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"k\">def<\/span> <span class=\"nf\">incrementar<\/span><span class=\"p\">(<\/span><span class=\"n\">p<\/span><span class=\"p\">):<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"n\">p<\/span><span class=\"o\">.<\/span><span class=\"n\">edad<\/span> <span class=\"o\">+=<\/span> <span class=\"mi\">1<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"k\">return<\/span> <span class=\"n\">p<\/span>\r\n<span class=\"gp\">...<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">personas<\/span> <span class=\"o\">=<\/span> <span class=\"nb\">map<\/span><span class=\"p\">(<\/span><span class=\"k\">lambda<\/span> <span class=\"n\">p<\/span><span class=\"p\">:<\/span> <span class=\"n\">Persona<\/span><span class=\"p\">(<\/span><span class=\"n\">p<\/span><span class=\"o\">.<\/span><span class=\"n\">nombre<\/span><span class=\"p\">,<\/span> <span class=\"n\">p<\/span><span class=\"o\">.<\/span><span class=\"n\">edad<\/span><span class=\"o\">+<\/span><span class=\"mi\">1<\/span><span class=\"p\">),<\/span> <span class=\"n\">personas<\/span><span class=\"p\">)<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"k\">for<\/span> <span class=\"n\">persona<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">personas<\/span><span class=\"p\">:<\/span>\r\n<span class=\"gp\">... <\/span>    <span class=\"nb\">print<\/span> <span class=\"n\">persona<\/span>\r\n<span class=\"gp\">...<\/span>\r\n<span class=\"go\">Leonardo de 39 a\u00f1os<\/span>\r\n<span class=\"go\">Ana de 34 a\u00f1os<\/span>\r\n<span class=\"go\">Sabrina de 13 a\u00f1os<\/span>\r\n<span class=\"go\">Enrique de 4 a\u00f1os<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"lambda\" class=\"section\"><span id=\"python-fun-lambda\"><\/span><\/p>\n<h2>lambda<\/h2>\n<p>La expresi\u00f3n\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">lambda<\/span><\/code>, es una funci\u00f3n an\u00f3nima que suelen ser usadas cuando necesita una funci\u00f3n una sola vez. Normalmente usted crea funciones\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">lambda<\/span><\/code>\u00a0con el \u00fanico prop\u00f3sito de pasarlas a funciones de orden superior.<\/p>\n<p>En muchos lenguajes, el uso de\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">lambdas<\/span><\/code>\u00a0sobre funciones definidas causa problemas de rendimiento. No es el caso en Python.<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"kn\">import<\/span> <span class=\"nn\">os<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">archivos<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">listdir<\/span><span class=\"p\">(<\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"vm\">__file__<\/span><span class=\"o\">.<\/span><span class=\"n\">replace<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"\/os.pyc\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"\/\"<\/span><span class=\"p\">))<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"nb\">print<\/span> <span class=\"nb\">filter<\/span><span class=\"p\">(<\/span><span class=\"k\">lambda<\/span> <span class=\"n\">x<\/span><span class=\"p\">:<\/span> <span class=\"n\">x<\/span><span class=\"o\">.<\/span><span class=\"n\">startswith<\/span><span class=\"p\">(<\/span><span class=\"s1\">'os.'<\/span><span class=\"p\">),<\/span> <span class=\"n\">archivos<\/span><span class=\"p\">)<\/span>\r\n<span class=\"go\">['os.pyc', 'os.py']<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>En el ejemplo anterior se usa el m\u00e9todo\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">os.__file__<\/span><\/code>\u00a0para obtener la ruta donde esta instalada el m\u00f3dulo\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">os<\/span><\/code>\u00a0en su sistema, ejecutando la siguiente sentencia:<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"vm\">__file__<\/span>\r\n<span class=\"go\">'\/usr\/lib\/python2.7\/os.pyc'<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>Si con el m\u00e9todo\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">os.__file__<\/span><\/code>\u00a0obtiene la ruta del m\u00f3dulo\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">os<\/span><\/code>\u00a0con el m\u00e9todo\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">replace(\"\/os.pyc\",<\/span>\u00a0<span class=\"pre\">\"\/\")<\/span><\/code>\u00a0busca la cadena de car\u00e1cter \u00ab\/os.pyc\u00bb y la remplaza por la cadena de car\u00e1cter \u00ab\/\u00bb<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"vm\">__file__<\/span><span class=\"o\">.<\/span><span class=\"n\">replace<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"\/os.pyc\"<\/span><span class=\"p\">,<\/span> <span class=\"s2\">\"\/\"<\/span><span class=\"p\">)<\/span>\r\n<span class=\"go\">'\/usr\/lib\/python2.7\/'<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>Luego se define la variable\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">archivos<\/span><\/code>\u00a0generando una lista de archivos usando la funci\u00f3n\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">os.listdir()<\/span><\/code>, pasando el par\u00e1metro obtenido de la ruta donde se instalo el m\u00f3dulo\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">os<\/span><\/code>\u00a0ejecutando en el comando previo, con la siguiente sentencia:<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"n\">archivos<\/span> <span class=\"o\">=<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">listdir<\/span><span class=\"p\">(<\/span><span class=\"s2\">\"\/usr\/lib\/python2.7\/\"<\/span><span class=\"p\">)<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>De esta forma se define en la variable\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">archivos<\/span><\/code>\u00a0un\u00a0<span class=\"std std-ref\">tipo lista<\/span>\u00a0con un tama\u00f1o de\u00a0<em>433<\/em>, como se puede comprobar a continuaci\u00f3n:<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"nb\">type<\/span><span class=\"p\">(<\/span><span class=\"n\">archivos<\/span><span class=\"p\">)<\/span>\r\n<span class=\"go\">&lt;type 'list'&gt;<\/span>\r\n<span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"n\">archivos<\/span><span class=\"p\">)<\/span>\r\n<span class=\"go\">443<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>Opcionalmente puede comprobar si la cadena de caracteres\u00a0<strong>os.pyc<\/strong>\u00a0se encuentras una de las posiciones de la lista\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">archivos<\/span><\/code>, ejecutando la siguiente sentencia:<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"s2\">\"os.pyc\"<\/span> <span class=\"ow\">in<\/span> <span class=\"n\">archivos<\/span>\r\n<span class=\"go\">True<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>Ya al comprobar que existe la cadena de caracteres \u00ab<strong>os.pyc<\/strong>\u00bb se usa una funci\u00f3n\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">lambda<\/span><\/code>\u00a0como par\u00e1metro de la funci\u00f3n\u00a0<span class=\"std std-ref\">filter()<\/span>\u00a0para filtrar todos los archivos del directorio \u00ab<em>\/usr\/lib\/python2.7\/<\/em>\u00bb por medio del funci\u00f3n\u00a0<code class=\"docutils literal notranslate\"><span class=\"pre\">os.listdir()<\/span><\/code>\u00a0que inicien con la cadena de caracteres \u00ab<strong>os.<\/strong>\u00bb usando la funci\u00f3n\u00a0<span class=\"std std-ref\">startswith()<\/span>.<\/p>\n<div class=\"highlight-default notranslate\">\n<div class=\"highlight\">\n<pre><span class=\"gp\">&gt;&gt;&gt; <\/span><span class=\"nb\">print<\/span> <span class=\"nb\">filter<\/span><span class=\"p\">(<\/span><span class=\"k\">lambda<\/span> <span class=\"n\">x<\/span><span class=\"p\">:<\/span> <span class=\"n\">x<\/span><span class=\"o\">.<\/span><span class=\"n\">startswith<\/span><span class=\"p\">(<\/span><span class=\"s1\">'os.'<\/span><span class=\"p\">),<\/span> <span class=\"n\">os<\/span><span class=\"o\">.<\/span><span class=\"n\">listdir<\/span><span class=\"p\">(<\/span><span class=\"s1\">'\/usr\/lib\/python2.7\/'<\/span><span class=\"p\">))<\/span>\r\n<span class=\"go\">['os.pyc', 'os.py']<\/span>\r\n<\/pre>\n<\/div>\n<\/div>\n<p>As\u00ed de esta forma se comprueba que existe el archivo compilado \u00ab<strong>os.pyc<\/strong>\u00bb de Python junto con el mismo m\u00f3dulo Python \u00ab<strong>os.py<\/strong>\u00bb.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Funciones de orden superior Las funciones de Python pueden tomar funciones como par\u00e1metros y devolver funciones como resultado. Una funci\u00f3n que hace ambas cosas o alguna de ellas se llama funci\u00f3n de orden superior. filter() La funci\u00f3n\u00a0filter()\u00a0es una funci\u00f3n la cual toma un\u00a0predicado\u00a0y una lista y devuelve una lista con los elementos que satisfacen el [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":331,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[39,40],"tags":[],"class_list":["post-377","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacion","category-python"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/equipomedios.com\/blog\/wp-content\/uploads\/2024\/08\/python-logo-master-v3-TM.png?fit=601%2C203&ssl=1","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/posts\/377","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/comments?post=377"}],"version-history":[{"count":1,"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/posts\/377\/revisions"}],"predecessor-version":[{"id":378,"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/posts\/377\/revisions\/378"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/media\/331"}],"wp:attachment":[{"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/media?parent=377"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/categories?post=377"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/equipomedios.com\/blog\/wp-json\/wp\/v2\/tags?post=377"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}