¿Cómo definir una función en Python?

Share on facebook
Share on twitter
Share on linkedin
Share on telegram
Share on whatsapp

Contenidos

Una función es un bloque de código reutilizable que puede realizar una tarea básica. La definición de función en Python puede ser un poco distinto de la sintaxis utilizada en lenguajes como C, C ++ o Java. El objetivo de este post es proporcionar la sintaxis para la definición de funciones en Python.

La definición de la función comienza con un def keyword seguida del nombre de la función y los argumentos que la función puede tomar. Estos argumentos están entre paréntesis y puede haber cualquier número de argumentos, incluido el cero. Cuando hay más de un argumento, están separados por una coma. Dado que Python es un lenguaje de tipo impreciso (lo que significa que no asignamos un tipo de datos a una variable cuando se declara), no deberíamos incluir los tipos de datos para los argumentos. La declaración de definición de función termina con dos puntos. En Python, definimos una función de la próxima manera:

def function_name(arg1,arg2,arg3,...):
    """
    function logic goes here.
    """
    return value1, value2, value3,...

A continuación se muestra una función simple,

def greet():
    print("hello world")

Esta es una función básica que imprime «Hola Mundo”A la consola.

Sangría

Si miramos de cerca la definición de la función, vemos que no hay llaves alrededor del cuerpo de la función. En Python, el cuerpo de la función se identifica por el nivel de sangría. Dado que no usamos llaves para indicar el cuerpo de la función, la sangría es útil para que el intérprete de Python sepa qué parte del código establece la lógica de la función. Si no tenemos una sangría de la lógica de la función relativa a la declaración de la función, una IndentationError se generará y la función no se interpretará.

def fun(name):
print("hello" + name)

La función anterior no se compilará y arrojará un IndentationError.

Devolver valores

Una función puede devolver un valor en cuyo caso se insinúa al intérprete por medio de la regreso declaración. A diferencia de C, C ++ o Java, una función de Python puede devolver múltiples valores. Si no incluimos una declaración de devolución, el control se transferirá automáticamente al código de llamada sin devolver ningún valor. Un valor predeterminado de Ninguno se devolverá si no hay una declaración de devolución. Del mismo modo que con otros lenguajes, una función puede tener como máximo una declaración de retorno.

def add(a, b):
    return a + b
def hello():
    print("Hello world")
res = add(5,7) #res will be having a value of 12.
res = hello() #res will be having a value of None.

Argumentos predeterminados

Podemos determinar valores predeterminados para los argumentos en la definición de la función. Para esto utilizamos la sintaxis siguiente. Tenga en cuenta que los argumentos predeterminados deben estar en el lado derecho de la lista de argumentos. Dicho de otra forma, un argumento predeterminado solo debe venir después de todos los argumentos no predeterminados.

def areaOfCircle(radius, pi=3.14):
    return pi * radius * radius

Aquí la función toma un argumento pi predeterminado que se establece en el lado derecho de la lista de argumentos. Si definimos el argumento predeterminado a la izquierda de un argumento no predeterminado, obtenemos un Error de sintaxis.

Funciones de llamada

Ahora que hemos definido funciones, vemos cómo podemos llamarlas en nuestro código. Para llamar a una función usamos el nombre de la función junto con los argumentos que se usaron para establecer la función. El número de argumentos debe coincidir exactamente con el número de argumentos presentes en la definición de la función. Cualquier diferencia en el número de argumentos elevará la Error de tecleado.

def areaOfCircle(radius, pi=3.14):
    return pi * radius * radius
#function call
print(areaOfCircle(5))
#note that the default argument is not passed a value.
#prints 78.5 on the screen.

Sobrecarga de funciones

Los programadores con experiencia en C ++ o Java habrían sobrecargado funciones a menudo. La sobrecarga de funciones no funciona en Python debido a que si definimos una función dos o más veces variando el número de argumentos, la última función establecida anulará las definiciones anteriores. Si la función con el número especificado de argumentos en la llamada a la función ni siquiera existe, obtenemos un Error de tecleado. A modo de ejemplo,

def add(a, b):
    return a + b
def add(a, b, c):
    return a + b + c
print(add(1,2)) #throws a TypeError asking for one more argument.
print(add(1,2,3)) #prints 6 on the console.

Pasando funciones como argumentos

Podemos pasar una función en sí misma como argumento a una función distinto. Supongamos que queremos aplicar una función específica a una matriz de números. En lugar de establecer una función y llamarla usando un bucle for, podríamos simplemente utilizar la función map. La función de mapa es una poderosa función incorporada que toma una función y una colección de ítems como argumentos y aplica la función de entrada a toda la colección de ítems y devuelve los ítems procesados.

def square(i):
    return i * i 
res = list(map(square, [1,2,3])) 
#res now contains [1,4,9]. We have gotten the results without even looping through the list

* argumentos y ** kwargs

Hablando de argumentos, hay algunos tipos especiales de argumentos. Es factible que los programadores experimentados hayan utilizado este argumento en C y C ++. Python además ofrece esas capacidades. Si no sabemos cuántos argumentos recibirá una función a lo largo del tiempo de ejecución, podemos utilizar * args para recibir esos argumentos en la definición de la función. Además podemos lograr una sobrecarga de funciones usando * args aún cuando técnicamente no es una sobrecarga de funciones dado que no estamos definiendo múltiples funciones con el mismo nombre de función.

def add(*args):
    sum = 0
    for arg in args:
        sum += arg
    return sum
add(1,2,3) #returns 6
add(1,2,3,4) #returns 10

Si queremos recibir argumentos con nombre, podemos utilizar ** kwargs.

def fun(**kwargs):
    for key in kwargs:
        print(key, kwargs[key])
fun(a=1,b=2,c=3)
#prints 
#a 1
#b 2
#c 3

Argumentos de la línea de comandos

Cualquier código de nivel de producción usaría un tipo especial de argumento. Estos son argumentos de la línea de comandos utilizados por la función principal. En Python, esos argumentos se pasarán a la función __main__. Podemos obtenerlos fácilmente analizando la variable sys.argv. Dado que analizar una cadena de línea de comandos es una tarea común, tenemos bibliotecas para hacer eso por nosotros, como argparse.

Cómo establecer funciones ‘anónimas’

Las funciones anónimas son funciones sin nombre. Además se les conoce como lambda funciones. ¡Pero espera! Si una función no tiene nombre, ¿cómo la llamará? Estos se denominan donde se definen. No se usan más adelante en el código la mayor parte del tiempo. Estas funciones son funciones especiales que se usan cuando necesitamos pasar una función en sí misma como argumento. Este caso ocurre con mayor frecuencia cuando queremos hacer algún tipo de procesamiento de datos con pandas o cualquier otra biblioteca. La función puede ser tan pequeña que no merece un nombre propio. Estas funciones se definen con la keyword lambda.

list(map(lambda x: x*x, [1,2,3]))
#prints values [1,4,9]

Hemos calculado los cuadrados de la lista de entrada sin ni siquiera establecer una función. Qué estamos haciendo con la declaración lambda x: x * x es que estamos definiendo una función anónima, dicho de otra forma, sin nombre, y la estamos llamando inmediatamente. Supongamos que queremos utilizar la función lambda en un punto posterior, podemos almacenarla en una variable de función y usarla.

square = lambda x: x*x
list(map(square, [1,2,3]))
#prints values [1,4,9]

El cuadrado variable almacena la función en números cuadrados y la usaremos en un momento posterior cuando queramos calcular los cuadrados de los números en una lista. Al establecer funciones lambda debemos prestar atención los siguientes puntos:

  1. No hay declaración de devolución.
  2. Los argumentos no están escritos entre paréntesis.
  3. No hay sangría.
  4. Varios argumentos están separados por una coma
  5. Estas funciones se definen en una sola línea.

Conclusión

Este post conciso mencionó los pasos para establecer una función y explicó los componentes de una función. La definición de función en Python puede parecer muy distinto en comparación con C, C ++ o Java sin llaves, tipos de retorno, etc. Pero una vez que comprendemos la estructura de la función, se torna más fácil escribir funciones más complicadas.

Sobre el Autor

Soy un desarrollador de Python que trabaja en una multinacional de TI durante más de tres años. Me pueden contactar por medio de Gmail.

Los medios que se muestran en este post no son propiedad de Analytics Vidhya y se usan a discreción del autor.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.