PROGRAMACIÓN EN PYTHON – CLASE 10

(Creado por el analista de sistemas y docente Leonel Iván Saafigueroa)


FUNCIONES

Definición, argumentos y retorno de valores.


Las funciones son bloques de código reutilizables que realizan una tarea específica. Utilizar funciones mejora la organización, legibilidad y mantenibilidad de tu código.

En Python, definimos funciones usando la palabra clave def.



Declaración:

La estructura básica de una función en Python es la siguiente:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# La función se define con def y comienza luego de los “:”
def saludar():
print("Hola, ¡bienvenido!")
# La función se define con def y comienza luego de los “:” def saludar(): print("Hola, ¡bienvenido!")
# La función se define con def y comienza luego de los “:”
def saludar():
    print("Hola, ¡bienvenido!")


Para ejecutar una función, simplemente debemos “llamarla” (invocarla) por su nombre.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def saludar():
print("Hola, ¡bienvenido!")
saludar() # <-- Aquí invocamos a la función “saludar()”
def saludar(): print("Hola, ¡bienvenido!") saludar() # <-- Aquí invocamos a la función “saludar()”
def saludar():
    print("Hola, ¡bienvenido!")

saludar() #  <-- Aquí invocamos a la función “saludar()”
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Hola, ¡bienvenido!
Hola, ¡bienvenido!
Hola, ¡bienvenido!


Los parámetros son las variables que se definen en la declaración de una función y actúan como recipientes para los valores que recibirá la función.

Los argumentos son los valores reales que se pasan a la función cuando se la invoca.

En la función sumar(a, b), a y b son parámetros. Cuando llamamos a la función, por ejemplo, con sumar(5, 3), 5 y 3 son los argumentos que se asignan a los parámetros a y b respectivamente. La función entonces opera con estos valores.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def sumar(a, b):
resultado = a + b
print("El resultado es:", resultado)
sumar(8, 4)
def sumar(a, b): resultado = a + b print("El resultado es:", resultado) sumar(8, 4)
def sumar(a, b):
   resultado = a + b
   print("El resultado es:", resultado)

sumar(8, 4)
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
El resultado es: 12
El resultado es: 12
El resultado es: 12


La flexibilidad de las funciones en Python se potencia gracias a sus argumentos. Estos no se limitan a tipos de datos numéricos; se pueden pasar cadenas de texto, listas, diccionarios, y cualquier otro tipo de objeto soportado por Python.

Esta capacidad de aceptar diversos tipos de datos hace que las funciones sean mucho más dinámicas y reutilizables, adaptándose a una amplia gama de situaciones y tareas.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def saludar(nombre):
print("Hola", nombre)
saludar("Santino")
saludar("Agustín")
def saludar(nombre): print("Hola", nombre) saludar("Santino") saludar("Agustín")
def saludar(nombre):
   print("Hola", nombre)

saludar("Santino")
saludar("Agustín")
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Hola Santino
Hola Agustín
Hola Santino Hola Agustín
Hola Santino
Hola Agustín


Las funciones en Python se vuelven más versátiles gracias a la posibilidad de definir valores por defecto para sus parámetros. Esto se logra asignando un valor directamente al parámetro en la definición de la función.

Si al llamar a la función no se proporciona un valor para ese parámetro, se utilizará el valor por defecto.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def saludar(nombre="invitado"):
print("Hola", nombre)
saludar() # Usa el valor por defecto
saludar("Maria") # Sobrescribe el valor por defecto
def saludar(nombre="invitado"): print("Hola", nombre) saludar() # Usa el valor por defecto saludar("Maria") # Sobrescribe el valor por defecto
def saludar(nombre="invitado"):
   print("Hola", nombre)

saludar()  # Usa el valor por defecto
saludar("Maria")  # Sobrescribe el valor por defecto
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Hola invitado
Hola Maria
Hola invitado Hola Maria
Hola invitado
Hola Maria


Es posible invocar funciones especificando el nombre del parámetro al que se asigna cada argumento.

Esto ofrece dos ventajas: permite modificar el orden de los argumentos sin afectar el resultado y, al ser más explícito, mejora la legibilidad y comprensión del código.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def sumar(a, b):
resultado = a + b
print("El resultado es:", resultado)
sumar(b=10, a=5)
def sumar(a, b): resultado = a + b print("El resultado es:", resultado) sumar(b=10, a=5)
def sumar(a, b):
   resultado = a + b
   print("El resultado es:", resultado)

sumar(b=10, a=5)
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
El resultado es: 15
El resultado es: 15
El resultado es: 15

Las funciones en Python pueden devolver valores utilizando la instrucción return, aumentando significativamente su utilidad y flexibilidad.

Return indica que la función ha completado su tarea y proporciona un resultado al código que la llamó. Este valor devuelto puede ser utilizado posteriormente en otras partes del programa, permitiendo una manipulación y procesamiento más complejos.

Por ejemplo, una función que suma dos números y sólo imprime el resultado con print() limita su uso; al usar return, el resultado de la suma se puede almacenar en una variable y utilizarse en cálculos posteriores o en otras partes del código, permitiendo un flujo de información más eficiente y versátil.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def sumar(a, b):
resultado = a + b
return resultado
total = sumar(15, 6)
print("El total es:", total)
def sumar(a, b): resultado = a + b return resultado total = sumar(15, 6) print("El total es:", total)
def sumar(a, b):
   resultado = a + b
   return resultado

total = sumar(15, 6)
print("El total es:", total)
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
El total es: 21
El total es: 21
El total es: 21


Las funciones en Python pueden llamar a otras funciones. Esta capacidad es fundamental para la programación modular, ya que permite descomponer tareas complejas en subtareas más sencillas y manejables. Además, fomenta la reutilización del código: en vez de repetir el mismo código varias veces, se pueden reutilizar funciones ya existentes para resolver partes de un problema mayor.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def calcular_area_rectangulo(base, altura):
"""Calcula el área de un rectángulo."""
return base * altura
def calcular_area_total(largo, ancho, alto):
"""Calcula el área total de un prisma rectangular."""
area_base = calcular_area_rectangulo(largo, ancho) # Llama a otra función
area_lateral = 2 * (largo * alto + ancho * alto)
area_total = 2 * area_base + area_lateral
return area_total
# Ejemplo de uso
largo = 5
ancho = 3
alto = 2
area = calcular_area_total(largo, ancho, alto)
print(f"El área total del prisma es: {area}")
def calcular_area_rectangulo(base, altura): """Calcula el área de un rectángulo.""" return base * altura def calcular_area_total(largo, ancho, alto): """Calcula el área total de un prisma rectangular.""" area_base = calcular_area_rectangulo(largo, ancho) # Llama a otra función area_lateral = 2 * (largo * alto + ancho * alto) area_total = 2 * area_base + area_lateral return area_total # Ejemplo de uso largo = 5 ancho = 3 alto = 2 area = calcular_area_total(largo, ancho, alto) print(f"El área total del prisma es: {area}")
def calcular_area_rectangulo(base, altura):
  """Calcula el área de un rectángulo."""
  return base * altura

def calcular_area_total(largo, ancho, alto):
  """Calcula el área total de un prisma rectangular."""
  area_base = calcular_area_rectangulo(largo, ancho)  # Llama a otra función
  area_lateral = 2 * (largo * alto + ancho * alto)
  area_total = 2 * area_base + area_lateral
  return area_total

# Ejemplo de uso
largo = 5
ancho = 3
alto = 2

area = calcular_area_total(largo, ancho, alto)
print(f"El área total del prisma es: {area}")
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
El área total del prisma es: 62
El área total del prisma es: 62
El área total del prisma es: 62


El alcance (o ámbito) de una variable define dónde en tu código es accesible. En Python, las variables definidas dentro de una función tienen alcance local: solo existen y son accesibles dentro de la función donde se definen.

Una vez que la función termina su ejecución, estas variables son destruidas y dejan de existir. Por lo tanto, no puedes acceder a una variable local desde fuera de la función donde fue creada.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
def saludar():
mensaje = "Hola, ¿cómo estás?"
print(mensaje)
saludar()
print(mensaje) # Esto va a dar un error.
def saludar(): mensaje = "Hola, ¿cómo estás?" print(mensaje) saludar() print(mensaje) # Esto va a dar un error.
def saludar():
   mensaje = "Hola, ¿cómo estás?"
   print(mensaje)

saludar()
print(mensaje)  # Esto va a dar un error.
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
print(mensaje) # Esto va a dar un error.
^^^^^^^
NameError: name 'mensaje' is not defined
print(mensaje) # Esto va a dar un error. ^^^^^^^ NameError: name 'mensaje' is not defined
    print(mensaje)  # Esto va a dar un error.
          ^^^^^^^
NameError: name 'mensaje' is not defined

Las variables definidas fuera de cualquier función tienen alcance global. Esto significa que son accesibles desde cualquier parte del programa, tanto dentro como fuera de las funciones.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
mensaje_global = "Hola, ¿cómo estás?"
def saludar():
print(mensaje_global)
saludar()
print(mensaje_global) # Esto funciona bien.
mensaje_global = "Hola, ¿cómo estás?" def saludar(): print(mensaje_global) saludar() print(mensaje_global) # Esto funciona bien.
mensaje_global = "Hola, ¿cómo estás?"

def saludar():
   print(mensaje_global)

saludar()
print(mensaje_global)  # Esto funciona bien.
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Hola, ¿cómo estás?
Hola, ¿cómo estás?
Hola, ¿cómo estás? Hola, ¿cómo estás?
Hola, ¿cómo estás?
Hola, ¿cómo estás?

TAREA PARA EL HOGAR

Este ejercicio te ayudará a practicar la creación y uso de funciones en Python para resolver un problema del mundo real: calcular descuentos.

Desarrollá un programa que a partir del precio original de un producto y un porcentaje de descuento, calcule y muestre el precio final. Esto implica:

  1. Crear una función: La misma debe tomar como entrada el precio original (un número) y el porcentaje de descuento (un número entre 0 y 100). Esta función debe calcular el precio final después de aplicar el descuento y devolverlo como resultado.
  2. Obtener datos del usuario: Tu programa solicitará al usuario que ingrese el precio original del producto y el porcentaje de descuento a aplicar. (validar la entrada del usuario para evitar errores, por ejemplo, que el porcentaje esté dentro del rango válido).
  3. Mostrar el resultado: Finalmente, tu programa debe mostrar claramente el precio final calculado por la función, utilizando la información ingresada por el usuario.

Recordá que la fórmula para calcular el precio final con descuento es:

precio_final = precio_original * (1 – descuento/100)