Una función es un bloque de código que puede ser reutilizado varias veces en un programa, es posible definir parámetros de entrada, establecer valores predeterminados a estos valores, y puede retornar un valor de resultado. Las funciones se definen con la palabra “def” seguido del nombre de la función, paréntesis y dentro de estos los valores que la función acepta como entrada; a continuación la función debe de llevar dos puntos y aumentar un nivel de indentación.

Ejemplo de función:

def suma(a, b):
  return a + b

c = suma(3,2)
print ( c )

print ( suma( c , 1) )

Parámetros posicionales

Cuando se define una función se definen los parámetros que puede recibir, estos parámetros se definen en un orden específico, y en ese orden deben de ser enviados los valores al momento de invocar a la función. Parámetros posicionales es invocar a una función enviando sus valores en el orden definido por la función.

Ejemplo de parámetros posicionales con función de potencia:

def potencia(base, exponente):
  print(base, " elevado a ", exponente, " es ", base**exponente)

potencia(3, 2)

Parámetros nombrados

Los parámetros posicionales permiten enviar los parámetros de la función en diferente orden, para esto es necesario seguir el formato: nombre_variable = valor.

Ejemplo de uso de función potencia, enviando el orden de diferente forma con parámetros nombrados:

potencia(exponente=2, base = 3)

En este ejemplo se observa que se enviaron los valores de la variable en orden inverso, si hacemos esto sin indicar el nombre de la variable, retornará un resultado incorrecto.

Retorno de múltiples valores

En Python es posible retornar múltiples valores en una función de diferentes formas:

  1. Tuplas
  2. Lista
  3. Diccionario de datos
  4. Python Data Class
  5. Objetos

    Para retornar tuplas, es suficiente con enviar los valores separado por comas, por ejemplo:

    return 1, 2
    

    Para devolver los valores en una lista, se utilizan corchetes:

    return [1, 2]
    

    Para devolver utilizando un diccionario de datos:

    return {"a": 1, "b": 2}
    

    Para devolver los datos utilizando Python Data Class y Objetos la sintaxis es muy similar, básicamente se define una clase, se instancia, se le asignan valores y se devuelve. A continuación, un ejemplo práctico:

    Creación del objeto carro para almacenar información enviada por el usuario y calculada en la función registrar_carro.

    class carro:
      def __init__(self, color, modelo, impuesto):
        self.color = color
        self.modelo = modelo
        self.impuesto = impuesto
    
    def registrar_carro(color, modelo):
    
      impuesto = 75
      if( modelo > 2020):
        impuesto = 350
    
      return carro(color, modelo, impuesto)
    
    mi_carro = registrar_carro("azul", 2022)
    print("Su impuesto de circulación: ", mi_carro.impuesto)
    

    Funciones como objetos y como parámetros de otras funciones

    Las funciones se pueden guardar como referencia en una variable, bajo este mismo concepto una variable que hace referencia a una función puede enviarse como parámetro a otra función.

    A continuación, un ejemplo:

    Esta función calcula el precio final del producto (agregando el IVA).

    def precio_final( calculo, regimen, precio ):
      iva = calculo(regimen)
      return round( precio * (iva + 1) , 2 )
    

    Esta función envía el IVA a cobrar si es régimen general o pequeño contribuyente.

    def impuesto_del_iva( regimen ):
        if( regimen == "general"):
          return 0.12
        else:
          return 0.05
    

    Calculo del IVA.

    print( precio_final(impuesto_del_iva, "general", 1040) )
    

    Funciones anónimas o lambda

    Las funciones anónimas no se definen con la palabra def, no tiene paréntesis y no posee un bloque de código a ejecutar, una función anónima o lambda se debe definir en una sola línea de código, y se debe de almacenar en una variable para poder ejecutarla.

    Ejemplo de cálculo del IVA:

    iva = lambda regimen : 0.12 if regimen == "general" else 0.05
    

    Calculo del IVA:

    print( precio_final(iva, "general", 1040) )