Guía Rápida de Funciones en Python

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


Etiquetas: Python funciones recursion lambda Parámetros

Publicado el 6-9 20:14