Funciones como objetos
Clase 20 de 31 • Curso de Introducción al Pensamiento Computacional con Python
Contenido del curso
Clase 20 de 31 • Curso de Introducción al Pensamiento Computacional con Python
Contenido del curso
Una de las características más poderosas de Python es que todo es un objeto, incluyendo las funciones. Las funciones en Python son "ciudadanos de primera clase".
Esto, en sentido amplio, significa que en Python las funciones:
Argumentos de otras funciones
Hasta ahora hemos visto que las funciones pueden recibir parámetros para realizar los cómputos que definen. Algunos de los tipos que hemos pasado son tipos simples como cadenas, números, listas, etc. Sin embargo, también pueden recibir funciones para crear abstracciones más poderosas. Veamos un ejemplo:
def multiplicar_por_dos(n): return n * 2 def sumar_dos(n): return n + 2 def aplicar_operacion(f, numeros): resultados = [] for numero in numeros: resultado = f(numero) resultados.append(resultado) return resultados nums = [1, 2, 3] aplicar_operacion(multiplicar_por_dos, nums) [2, 4, 6] aplicar_operacion(sumar_dos, nums) [3, 4, 5]
Funciones en expresiones
Una forma de definir una función en una expresión es utilizando el keyword lambda. lambda tiene la siguiente sintaxis: lambda <vars>: <expresion>.
Otro ejemplo interesante es que las funciones se pueden utilizar en una expresión directamente. Esto es posible ya que como lo hemos platicado con anterioridad, en Python las variables son simplemente nombres que apuntan a un objeto (en este caso a una función). Por ejemplo:
sumar = lambda x, y: x + y sumar(2, 3) 5
Funciones en estructuras de datos
Las funciones también se pueden incluir en diversas estructuras que las permiten almacenar. Por ejemplo, una lista puede guardar diversas funciones a aplicar o un diccionario las puede almacenar como valores.
def aplicar_operaciones(num): operaciones = [abs, float] resultado = [] for operacion in operaciones: resultado.append(operacion(num)) return resultado aplicar_operaciones(-2) [2, -2.0]
Como pudimos ver, las funciones son objetos muy versátiles que nos permiten tratarlas de diversas maneras y que nos permiten añadir capas adicionales de abstracción a nuestro programa. Compártenos cómo te imaginas que estas capacidades de Python te pueden ayudar a escribir mejores programas.
Sara Yaneth Contreras Elías
franklin andres rodriguez gonzalez
Brayan Segovia
Carlos Fernando Aguilar González
Moisés Manuel Morín Hevia
María José Medina
DIEGO ALEXANDER CASTELLANOS SANTAMARIA
Miguel Andres Rendon Reyes
Marco Antonio Candia Ortega
Axel Jiménez
Neftali García González
Alejandro Guerrero
Carlos Eduardo Gomez García
Luis Hernando Sarmiento Garzón
Juan Diego
Wilder Bravo
Juan Fernando Moyano Ramírez
Clayton Jhordan Iliquin Zavaleta
Andres Alvarez Becerra
Andres Alvarez Becerra
Juan Pablo Cortés Mora
Fabrizio Fasanando Sotelo
Miguel Andres Rendon Reyes
Sebastian Cifuentes
Fernando Jesús Núñez Valdez
Jaime Escobedo Vargas
Jordi Sort
Emmanuel Guerra Sánchez
Jaime Eduardo González Meléndez
Alex Jesús Huamanvilca Ichocán
William Wilfredo Moran Torres
Enzo Venturi
Eber Laurente Lliuyacc
Steve Calderón Sánchez
Ricardo F.
Marisol Catari Choquehuanca
ENRIQUE NIETO MARTINEZ
Josue Granados
Manuel Espitia
Julian Malarino
Manuel Espitia
++¿Cómo definir una función en Python?++
muchas gracias sara por la info
Encontré esta información acerca de la función lambda : ++Funciones lambda++ Si empiezo diciendo que las funciones o expresiones lambda sirven para crear funciones anónimas, posiblemente me diréis ¿qué me estás contando?, así que vamos a tomarlo con calma, pues estamos ante unas de las funcionalidades más potentes de Python a la vez que más confusas para los principiantes.
Una función anónima, como su nombre indica es una función sin nombre. ¿Es posible ejecutar una función sin referenciar un nombre? Pues sí, en Python podemos ejecutar una función sin definirla con def. De hecho son similares pero con una diferencia fundamental:
El contenido de una función lambda debe ser una única expresión en lugar de un bloque de acciones.
Y es que más allá del sentido de función que tenemos, con su nombre y sus acciones internas, una función en su sentido más trivial significa realizar algo sobre algo. Por tanto podríamos 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.
Si deconstruimos una función sencilla, podemos llegar a una función lambda. Por ejemplo tomad la siguiente función para doblar un valor:
En Dart también se usan las funciones anónimas
Saludos
Buen aporte
Lo importante de las funciones lambda -que creo que faltó mencionar- es que ellas deben ser funciones que son ejecutadas en una línea de código, es decir, funciones rápidas, sencillas, cortas. La ventaja de su uso es que el código se ejecutaria más rápido, ya que no se definiria una funcion con def, que trae consigo más abstracción.
bien explicado!
Es por eso que las llaman funciones anónimas, debido que no están definidas con un nombre como tal.
En el ejemplo de Argumento de otras funciones hizo falta establecer return, al menos a mi no me mostro nada si no se tenía, ¿alguien tuvo la misma situación?
No siempre las funciones tienen que regresar un valor distinto de null. Para mostrar la información se pudo haber colocado un print(resultados), en dado caso de que no quisieras que la función aplicar_operacion() regresara un valor distinto de null.
Me paso lo mismo, muchas gracias por tu aporte. Pregunta, tu IDE es Jupyter?, en visual studio tuve que incluir dos líneas de print con las funciones para poder ver los resultados
Esto de leer los comentarios esta aumentando mi capacidad de aprendizaje!! Dios bendiga la comunidad Platzi
Ohh las funciones lambda son como las arrow functions de JavaScript! Y lo de pasar como parámetro una función es como pasar un "callback" en JavaScript (o Closure en PHP), por comparar:
.
Python:
sumar = lambda x, y: x + y print(sumar(2, 3))
. JavaScript:
const sumar = (x, y) => x + y console.log(sumar(2, 3))
Lambda esta genial, calculo de factorial en una sola linea. 🤯
factorial = lambda x : 1 if x == 1 else x * factorial(x - 1) print(factorial(7))
🤯
A continuación un ejemplo de funciones como parámetros a otras fuciones
def suma(a,b): return a + b def resta(a,b): return a - b def multiplica(a,b): return a * b def divide(a,b): return a / b def operacion(v1, v2, funcion): return funcion(v1,v2) def error(): print("No ha seleccionado una operacion correcta") def inicio(): a = int(input("Escoge un entero: ")) b = int(input("Escoge otro entero: ")) tipo = int(input("Ingrese el tipo de operacion a utilizar \n 1. Suma \n 2. Resta \n 3. Multiplicacion \n 4. Division \n ==> ")) if tipo == 1: respuesta = operacion(a,b, suma) elif tipo == 2: respuesta = operacion(a,b, resta) elif tipo == 3: respuesta = operacion(a,b, multiplica) elif tipo == 4: respuesta = operacion(a,b, divide) else: error() print(f'La respuesta es {respuesta}') inicio()
no se vosotros pero en este curso no me estoy enterando de nada
Es entendible que te sientas confundido. Deberías llevar pimero el curso básico de python. Espero que así entiendas mejor :D
Alguien me puede hacer el favor de explicar la línea que hay dentro del for? En especial la función "operacion(num)". No entiendo muy bien de donde sale.
Gracias, pero no se cual es la función operación, no veo a ninguna definida con ese nombre
Hola Andres
Lo que sucede ahi es que
Primero, en el for, la variable "operacion" tomarà el valor de cada uno de los valores en (in) operaciones
Segundo, lo que hay dentro de operaciones son funciones
Abs() y Float(), ambas reciben un parametro, el cual va a ser el numero num que entra en la funcion como tal
Abs() recibe un parametro y devuelve el absoluto, como podras notar, al entrar -2, te regresa un 2
y float, e devuelve el punto flotante, que seria -2.0
Gracias a que en Python las funciones son tan versátiles se pueden crear programas realmente modulares permitiendo reutilizar una gran cantidad de código de manera sencilla.
Tal vez por esa peculiaridad, lo hace terreno fértil para el maching learning
Pregunta, ¿para que sirve el .append?
Para agregar datos a un array.
Que en el caso de Python se le llama Lista
Si he entendido bien, las funciones en expresiones ¿seria como crear una función de forma rápida? O sea, esto:
sumar = lambda x,y: x + y
¿seria lo mismo que esto?
def sumar2(x,y): return x+y
Es correcto.
Las funciones como expresión son también conocidas como funciones anónimas y son muy utlizadas en lenguajes de scripting y funcionales como Python y JavaScript.
Su uso mas frecuente es aplicar transformaciones a elementos dentro de una lista.
En este ejercicio se provee una lista de números separados por comas que es guardada como string, después se convierte el string en una lista de enteros. Por último las funciones para duplicar y sumar 2 unidades se ponen dentro de una estructura de lista y se aplican a cada número de la lista proveída por el usuario:
Interesante gracias por compartir!
lambda es como las arrow function de javascript?????
Encontré el aporte de un compañero, espero te ayude.
Amigos, ¿A qué se refiere el profesor cuando dice que en Python las funciones tiene un tipo?
Tal vez haga referencia a las funciones que creamos nosotros y las que ya están predefinidas por el lenguaje.
En las primeras clases se hacía referencia al hecho que las variables tienen un "tipo". Es decir, se relacionan de una manera específica con otras variables. Por ejemplo, en las operaciones matemáticas. Creo que se refiere a ello. Ya que podemos realizar diversas operaciones directamente con las funciones. Por eso mismo se dice que las funciones son objetos.
La expresión lambda me sorprende. Simplifica mucho escribir funciones simples que devuelven alguna operación matemática, evitándose la complejidad de la sintaxis tradicional de funciones.
Creo que puede ayudar mucho a crear código altamente reutilizable y limpio. Por ejemplo las funciones anidadas permiten crear closures, las funciones lambda permiten crear funciones en una sola línea, y el que se puedan almacenar funciones en arreglos permite implementar el patrón Chain of responsability(cadena de responsabilidades). Además que se puede hacer una composición de funciones muy similar a la forma en que se puede hacer en javascript. Habría estado muy bien un video con ejemplos de esto.
Un caso especifico que se me viene a la mente es la manipulación de archivos. En Python hay funciones que nos permiten manipular archivos, abrirlos, escribir, cerrarlos, eliminarlos, etc. Entonces imagina que tenemos 3 funciones para aplicarle a una lista de 100 archivos, podrias modificar esos 100 archivos de 3 maneras diferentes, todo eso dentro de un bucle for.
Perdón, qué quiere decir resultado = [] ??
Quiere decir que resultado sera una lista, y despues cuando hace resultado.append(operacion(num)) lo que esta haciendo es agregar ese valor a la lista.
Entiendo. Gracias Julián.