.. -*- coding: utf-8 -*- .. _python_fun_avanzadas: Funciones avanzadas ------------------- En Python hay varias funciones avanzadas que se describen a continuación: .. _python_fun_predicado: Funciones de predicado ...................... Las funciones de predicado no es más que una función la cual dice si algo es ``True`` o ``False``, es decir, es una función que devuelve un tipo de datos :ref:`booleano `. .. todo:: TODO terminar de escribir la sección Funciones de predicado. Objetos de función .................. .. todo:: TODO escribir la sección Objetos de función. .. _python_fun_anonimas: Funciones anónimas .................. Una función anónima, como su nombre indica es una función sin nombre. Es decir, es posible ejecutar una función sin referenciar un nombre, en Python puede ejecutar una función sin definirla con ``def``. De hecho son similares pero con una diferencia fundamental, **el contenido de una función anónima debe ser una única expresión en lugar de un bloque de acciones**. Las funciones anónimas se implementan en Python con las funciones o expresiones :ref:`lambda `, esta es unas de las funcionalidades más potentes de Python, pero a la vez es la más confusas para los principiantes. Más allá del sentido de función que usted tiene hasta el momento, con su nombre y sus acciones internas, una función en su sentido más trivial significa realizar algo sobre algo. Por tanto se podría decir que, mientras las funciones anónimas ``lambda`` sirven para realizar funciones simples, las funciones definidas con ``def`` sirven para manejar tareas más extensas. .. _python_expresion_lambda: Expresión lambda ................ Si deconstruye una función sencilla, puede llegar a una función ``lambda``. Por ejemplo la siguiente función es para doblar un valor de un número: :: >>> def doblar(numero): ... resultado = numero*2 ... return resultado >>> doblar(2) 4 >>> type(doblar) Si el código fuente anterior se simplifica se verá, de la siguiente forma: :: >>> def doblar(numero): ... return numero*2 >>> doblar(2) 4 >>> type(doblar) Usted puede todavía simplificar más, escribirlo todo en una sola línea, de la siguiente forma: :: >>> def doblar(numero): return numero*2 >>> lambda numero: numero*2 at 0x7f1023944e60> >>> doblar(2) 4 >>> type(doblar) Esta notación simple es la que una función ``lambda`` intenta replicar, observe, a continuación se va a convertir la función en una función anónima: :: >>> lambda numero: numero*2 at 0x7f1023944e60> En este ejemplo tiene una función anónima con una entrada que recibe ``numero``, y una salida que devuelve ``numero * 2``. Lo único que necesita hacer para utilizarla es guardarla en una variable y utilizarla tal como haría con una función normal: :: >>> doblar = lambda numero: numero*2 >>> doblar(2) 4 >>> type(doblar) Con la flexibilidad de Python usted puede implementar infinitas funciones simples. Usted puede encontrar más ejemplos de funciones anónimas usando ``lambda`` en la sección :ref:`ejemplos de funciones avanzadas `. Usted puede explotar al máximo la función lambda utilizándola en conjunto con otras funciones como :ref:`filter() ` y :ref:`map() `. .. _python_fun_avanzadas_ejs: Ejemplos de funciones avanzadas ............................... A continuación, se presentan algunos ejemplos de su uso: **Función lambda - operaciones aritméticas** A continuación, se presenta un ejemplo para comprobar si un número es impar: :: >>> impar = lambda numero: numero%2 != 0 >>> impar(5) True **Función lambda - operaciones de cadena** A continuación, se presenta un ejemplo para darle la vuelta a una cadena rebanándola en sentido inverso: :: >>> revertir = lambda cadena: cadena[::-1] >>> revertir("Plone") 'enolP' >>> revertir("enolP") 'Plone' **Función lambda - varios parámetros** A continuación, se presenta un ejemplo para varios parámetros, por ejemplo para sumar dos números: :: >>> sumar = lambda x,y: x+y >>> sumar(5,2) 7 .. seealso:: Consulte la sección de :ref:`lecturas suplementarias ` del entrenamiento para ampliar su conocimiento en esta temática.