top of page
Foto del escritorBraulio Madrid

Funciones en Python


Una función en los lenguajes de programación son pequeños bloques de código que generalmente usamos para resumir código redundante y repetitivo, para usarlo continuamente.


Para aclarar el término y evitar discusiones futuras poco practicas, en muchos lenguajes a las funciones también les llaman métodos, la única diferencia es que los métodos son funciones que se encuentran dentro de clases, pero no deja de funcionar de la misma forma, de declararse de la misma forma y sirven para los mismos propósitos. Así que como esto son ejemplos no mas, que no van dentro de ninguna clase, le llamaré función.

def funcion(parametro):
	print(parametro)

Para definir una función en Python basta con la palabra reservada "def", el nombre de la función, paréntesis y dentro los parámetros si se necesitan, luego "dos puntos" ":", luego las instrucciones dentro de la indentación correspondiente.

def funcion():
	pass

También es posible definir funciones o métodos vacíos con la palabra reservada "pass".

def sumar(sumando_a : int, sumando_b : int) -> int:
	return sumando_a + sumando_b

Esta sería una forma de notación que muestra el tipo de valor que devuelve la función y el tipo de valor que se espera del ingreso en los parámetros, este tipo de notación no es muy común, casi nadie lo usa, a veces produce problemas según que IDE se use, puede ser tomado como un error de sintaxis, sin embargo creo que es importante, pues es una forma elegante de documentar el código, así luego se rompan las reglas del mismo.

valor1 = funcion("hola")
valor2 = sumar(10,5)
print(type(valor1)) # None
print(type(valor2)) # int

Algo curioso es que todas las funciones o métodos devuelven algún tipo de valor, en el primer caso la función "función", sin tener un retorno, este devuelve None y puede ser asignado a una variable, en el caso de la función sumar, el retorno es de tipo int.

valor2 = sumar(10.5,5)
print(type(valor2)) # float

A pesar de que dejamos indicaciones que el retorno sería un número entero, al ingresar un número flotante dentro de los parámetros, el retorno será un número flotante.

def sumar(sumando_a, sumando_b = 0):
	return sumando_a + sumando_b
valor2 = sumar(10)
print(valor2) # 10 + 0 = 10

En Python es muy fácil declarar parámetros opciones, simplemente con asignar un valor por defecto a dicho parámetro, así cuando se invoque a la función, no es necesario rellenar todos y cada uno de los parámetros.

def sumar(sumandos):
	return sum(sumandos)
valor2 = sumar([10,5,21,34,12])

Si no se sabe con exactitud cuantos números vamos a sumar, se puede optar por usar una lista o cualquier tipo de colección, sin embargo existe una solución mas elegante.


def sumar(*args):
	return sum(args)

Anteponer un asterisco (*) al parámetro, Python toma estos valores como una tupla de valores opcionales, el nombre del parámetro es opcional, pero por convención se usa "Args" como nombre.

def saludar_personas(**kwargs):
	for persona in kwargs.values:
		print(f"Hola, buenas tardes {persona}")

saludar_personas(persona1 = "Juan", persona2 = "Federico", persona3 = "Felipe")
# Hola, buenas tardes Juan
# Hola, buenas tardes Federico
# Hola, buenas tardes Felipe

Si anteponemos dos asteriscos(**) al parámetro, toma estos valores como un diccionario de valores y llaves opcionales.

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

def sumar(sumandos : list):
	return sum(sumandos)

resultado = sumar(10,5) # Produce error por sobre escritura de funcion
resultado = sumar([10,5,21,34,12]) # Función sobreescrita.

Python no soporta sobrecarga de funciones, lo que ocurre es que al definir la función sumar por segunda vez, esta sobreescribe los bloques de código de la primera.

def factorial(entero):
	if entero == 1:
		return 1
	else:
		entero * factorial(entero - 1)

Podemos usar funciones recursivas en Python, aunque este tipo de funciones viene del paradigma funcional, realmente no es recomendable por cuestiones de rendimiento, es mejor usar un ciclo for o while para el mismo propósito.


Esto es todo lo que sé referente a funciones, si hay algún dato que pueda ser de utilidad o que se me haya escapado, puede ponerlo abajo en los comentarios, así nos nutrimos todos. No siendo mas nos vemos en un próximo post.

23 visualizaciones0 comentarios

Comments


bottom of page