4Geeks logo
Sobre Nosotros

Catálogo de contenidos

Para los geeks autodidactas, este es nuestro extenso catálogo de contenido con todos los materiales y tutoriales que hemos desarrollado hasta el día de hoy.

Tiene sentido comenzar a aprender leyendo y viendo videos sobre los fundamentos y cómo funcionan las cosas.

Data Science and Machine Learning - 16 wks

Full-Stack Software Developer - 16w

Buscar en lecciones

Aprendizaje social y en vivo

La forma más eficiente de aprender: Únete a una cohorte con compañeros, transmisiones en vivo, sesiones improvisadas de codificación, tutorías en vivo con expertos reales y mantenga la motivación.

← Regresar a lecciones
Editar en Github

Trabajando con Funciones

¿Qué son las Funciones?

Dominar el uso de listas y bucles es una de las 5 habilidades fundamentales para construir algoritmos:

  1. Variables.
  2. Conditionales.
  3. Listas.
  4. Bucles.
  5. Funciones.

¿Qué son las Funciones?

Básicamente, una función es un conjunto de líneas de código agrupadas para cumplir un objetivo específico, por ejemplo veamos esta función para multiplicar dos números:

1def multiplicar(a, b): 2 return a * b 3 4resultado = multiplicar(2, 6) 5print(str(resultado)) # imprime 12 6

Analizando el código de arriba tenemos las siguientes conclusiones:

  • Para crear una función debemos utilizar la sentencia def.
  • Luego de def colocamos el nombre que le queremos dar a la función (en este caso "multiplicar").
  • Después del nombre debemos colocar entre paréntesis los parámetros o entradas que tendrá la función separados por coma (en este caso a y b). Puedes escoger el nombre de los parámetros pero siempre deben tener el mismo orden.
  • Tenemos que terminar la línea con dos puntos :, de esa forma el computador sabrá que vamos a empezar a programar una función (algoritmo).
  • Por ultimo debemos añadir un return(es una buena práctica), toda función debe retornar algo, asi sea None, en este caso retornamos la multiplicación entre los parámetros a y b (entradas).

De ahora en adelante cada vez que quiera multiplicar dos numeros puedo re-utilizar la función multiplicar de la siguiente manera, cuantas veces lo necesites:

1resultado_1 = multiplicar(2, 6) 2print(str(resultado_1)) # imprime 12 3 4resultado_2 = multiplicar(5, 2) 5print(str(resultado_2)) # imprime 10 6

📺 Haz clic aquí para ver un video explicativo sobre funciones (10min)

Segundo ejemplo sobre funciones

Veámos esta función que dado un número de invitados permite calcular el costo de organizar una fiesta con el siguiente algoritmo:

  1. Primero se debe conocer el número de invitados (se le debe pasar como parámetro a la función)
  2. El costo general de una fiesta es de 10 dolares por invitados
  3. Si hay más de 200 invitados se ofrece un descuento de 10%.
1def calcular_costo(numero_de_invitados): 2 precio_por_invitado = 10 3 costo_total = numbero_de_invitados * precio_por_invitado 4 if numero_de_invitados > 200: 5 costo_total = costo_total - (costo_total * 0.1) # ← descuento de 10% 6 return costo_total 7

Datos importantes sobre las funciones en Python:

  1. Cada función debe tener un propósito. (un objetivo) (como nuestra función "multiplicar"). El propósito de la función es calcular la multiplicación entre dos números dados.
  2. Debe tener un nombre único. En este caso particular, nuestra función se llama "multiplicar", que es un gran nombre porque sabes exactamente qué hace la función, es explícita.
  3. Debe devolver algo. De forma predeterminada, en Python, todas las funciones devuelven None, pero debes reemplazarlo y siempre devolver algo útil. En este ejemplo, queremos devolver el resultado de una multiplicación de a por b.
  4. Las funciones pueden tener parámetros. Un "parámetro" es una variable que la función puede recibir al principio de su código (como a y b en nuestro ejemplo).

La idea es tener una librería de cientos de funciones y usarlas como nos plazca, declaras todas tus funciones y luego empiezas a usarlas y reutilizarlas todo el tiempo.

Pero, ¿Por qué usar Funciones en lugar de simplemente hacer todo en una gran porción de código?

La codificación es muy abstracta y sucede mucho que no tienes idea de lo que escribiste ayer. Antes de que existieran las funciones, los algoritmos eran una enorme serie interminable de líneas de código donde los desarrolladores tenían dificultades y se perdían. Es difícil para tu cerebro seguir un procedimiento / algoritmo de gran longitud; Cuantas más líneas de código, más abstracto se vuelve.

Al utilizar funciones tienes las siguientes ventajas:

  1. Dividir y conquistar: divide tu algoritmo en sub-algoritmos más pequeños y concéntrate en un problema a la vez.
  2. Menos código: mientras menos codigo mejor, cuando usas funciones estas pensando en reutilizar en lugar de copiar y pegar.
  3. Reutiliza tu código: llamando a la función varias veces, reduciendo drásticamente la longitud de tu código.
  4. Organiza tu código: los nombres de las funciones te dirán qué hace esa parte del código, puedes tener todas las funciones en un archivo separado y reutilizarlas en todos sus desarrollos futuros.

☝️ Si lo piensas bien, las funciones son equivalentes a los libros. Almacenan funciones y formas de hacer las cosas y en futuros desarrollos simplemente los reutilizas en lugar de tener que resolver todo de nuevo.

El Alcance de la Función

Todas las funciones deben comenzar y terminar en algún lugar, esto se llama alcance de la función. Puedes delimitar los límites de la función utilizando identación de la siguiente manera:

1# esta parte del código está FUERA de la función 'multiplicar' 2 3def multiplicar(a, b): 4 # esta parte del código está DENTRO de mi función 5 # porque está después de la declaración e identada a la derecha 6 7 return a * b 8 9 # esta parte del código está DENTRO 10 # pero nunca se ejecutará porque se encuentra DESPUÉS del return 11 12 13# esta parte del código está FUERA de la función 'multiplicar' 14# porque ya no tiene la identación a la derecha 15print(str(multiplicar(34, 2))) 16

Cualquier variable que declare dentro de la función no estará disponible fuera de ella.

1def multiplicar(a, b): 2 mi_variable = 'hello' 3 return a * b 4 5# este print no funcionará, generará un error, porque mi_variable fue 6# declarado dentro de la función multiplicar, por lo tanto no está disponible fuera de su alcance. 7print(mi_variable) 8

☝️ Es muy importante recordar que una vez que use la instrucción return, la función dejará de ejecutarse, si hay algún código después de esa instrucción, nunca se ejecutará.

Funciones Lambda (funciones de una línea)

Si tu función va a tener una sola linea de código puedes declararla de una forma mucho mas ágil utilizando la parabra reservada lambda.

1multiplicar = lambda a, b : a * b 2resultado = multiplicar(2, 3) 3print(str(resultado)) 4

Lamba es ideal para casos en los que tengas funciones muy pequeñas. Aprenderás a quererlas por lo rápido que resulta codificar, especialmente cuando tengas que iterar arrays.

Llamando funciones

La única forma de usar una función (es decir de "llamarla") es usando paréntesis de esta forma:

1# Así se llama a una función sin parámetros 2multiplicar() 3 4# Así se llama a una función con parámetros 5multiplicar(<primer param>, <segundo param>) 6 7# por ejemplo, para multiplicar 3 por 9 8multiplicar(3, 9) 9

Recuerda asignarle a la función del parámetro que debiese recibir. En nuestro ejemplo, la función multiplicar se declaró pidiendo dos números para multiplicar.

Llamando funciones de forma anidada

Puedes combinar funciones como quieras y tener llamadas encadenadas como esta:

1def suma(a, b): 2 return a + b 3 4def multiplicar(a, b) 5 return a * b 6 7resultado = multiplicar(suma(3, 5), suma(1, 1))) 8 9 10# Las ejecuciones van de adentro hacia afuera. 11# Primero, se calculará la suma de 3 + 5 y 1 + 1. 12# A continuación, se multiplicarán sus respectivos resultados. 13primero = suma(3, 5) 14segundo = suma(1, 1) 15print(str(multiplicar(primero, segundo)) 16

☝️ Ve este ejemplo en vivo en replit

Veamos un ejemplo:

El siguiente código tiene 3 funciones declaradas:

1def get_average(ages): 2 # algo de código 3 4def get_youngest(ages): 5 # algo de código 6 7def get_person_info(name): 8 # algo de código 9

Como puedes ver, los nombres de las funciones son bastante específicos sobre lo que hacen las funciones, así como los parámetros asignados a ellas.

Otras cosas importantes a tener en cuenta:

  • Estamos llamando a la función get_person_info dos veces, sin usar funciones tendríamos que usar más código porque no tendríamos ninguna opción para reutilizar la función.
  • La función get_average es obtener el valor promedio en un array dado. No sabe nada más ¡Y eso es genial! Al separar tu código en pequeñas funciones, puedes concentrarte en una cosa a la vez.