Definición y Utilización de Funciones
def calcular(valor): # 'valor' representa el parámetro formal
'''
Calcula el doble del valor más uno
:param valor: número entero
:return: devuelve el resultado del cálculo
'''
resultado = 2 * valor + 1
return resultado
respuesta = calcular(5) # 'calcular()' invoca la función, 5 es el argumento real
print(respuesta)
Elementos de una función:
- def: palabra clave para definir funciones
- Nombre de la función: identificador para invocar la función
- Cuerpo de la función: lógica y operaciones realizadas
- Parámetros: permiten que la función devuelva datos al llamante
I. Ventajas del uso de funciones
- Reducción de código duplicado
- Mantenimiento de consistencia
- Facilidad de mantenimiento
II. Tipos de Parámetros en Funciones
Existen cuatro tipos principales de parámetros:
Parámetros Estándar
######### Definición de función #########
# 'nombre' es el parámetro formal de la función 'saludar'
def saludar(nombre):
print(f"Hola, {nombre}!")
# ######### Invocación de función #########
# 'María' es el argumento real pasado a la función
saludar('María')
Parámetros con Valores Predeterminados
def presentar(nombre, edad = 25):
print(f"{nombre} tiene {edad} años")
# Especificando ambos parámetros
presentar('Carlos', 30)
# Usando el valor predeterminado para edad
presentar('Ana')
Nota: Los parámetros con valores predeterminados deben ir al final de la lista de parámetros
Parámetros Dinámicos *args
def procesar_datos(*datos):
print(datos)
# Forma de invocación 1
procesar_datos(1, 2, 3, 4, 5)
# Forma de invocación 2
numeros = [10, 20, 30, 40]
procesar_datos(*numeros)
Parámetros Dinámicos **kwargs
def configurar_usuario(**config):
print(config)
# Forma de invocación 1
configurar_usuario(nombre='Pedro', edad=28)
# Forma de invocación 2
opciones = {'nombre': 'Laura', 'edad': 22, 'ciudad': 'Madrid'}
configurar_usuario(**opciones)
III. Variables en Funciones
Las variables en funcinoes pueden ser:
Variables Globales (convención: mayúsculas) Definición: Variables declaradas fuera de cualquier función
Variables Locales (convención: minúsculas) Definición: Variables declaradas dentro de una función
NOMBRE_USUARIO = 'admin' # Variable global
def cambiar_nombre():
nombre = 'superusuario' # Variable local
print(f"Dentro de función: {nombre}")
cambiar_nombre()
print(f"Fuera de función: {NOMBRE_USUARIO}
# Resultado:
Dentro de función: superusuario
Fuera de función: admin
global y nonlocal
La palabra clave global declara una variable como global, mientras que nonlocal referencia a la variable del ámbito superior
Sin declaración global
contador = 100
def incrementar():
contador = 90
incrementar()
print(contador) # Muestra 100
Con declaración global
contador = 100
def incrementar()
global contador
contador = 90
incrementar()
print(contador) # Muestra 90
Sin especificar variable de ámbito superior
def funcion_externa():
valor = 5
def funcion_interna():
valor = 10
funcion_interna()
print(valor)
funcion_externa() # Muestra 5
Especificando variable de ámbito superior
def funcion_externa():
valor = 5
def funcion_interna():
nonlocal valor
valor = 10
funcion_interna()
print(valor)
funcion_externa() # Muestra 10
IV. Funciones Recursivas
Nota: Su uso adecuado requiere experiencia avanzada
Una función recursiva es aquella que se invoca a sí misma
Características:
- Debe tener una condición de salida explícita
- En cada llamada recursiva, el problema debe reducirse en complejidad
def factorial(n):
print(f"Calculando factorial({n})")
if n == 0 or n == 1:
return 1 # Condición de salida
else:
resultado = n * factorial(n - 1)
print(f"factorial({n}) = {n} * factorial({n-1}) = {resultado}")
return resultado
factorial(4)
V. Funciones Lambda Anónimas
La sintaxis lambda: antes de los dos puntos están los parámetros, después la expresión cuyo resultado se devuelve. La forma más simple de función.
print([(lambda x:x+2)(x)for x in range(5)])
# Resultado: [2, 3, 4, 5, 6]
print((lambda a,b:a*b)(4,5))
# Resultado: 20
operar=lambda x,y:x+y
print(operar(7,3))
# Resultado: 10