Saltar al contenido

Funciones en Python

Saludos controleros y controleras, en esta entrada entenderemos para que sirven las funciones, como crear funciones en Python y resolveremos algunos ejercicios para que te quede más claro.

Si te gusta Python y deseas seguir aprendiendo este lenguaje de programación, te invito a ver el Curso Gratuito de Python desde Cero.

Y que te suscríbas al canal para que no te pierdas ningún video:

Funciones en Python

En todo lenguaje de programación es muy importante aprender a utilizar y crear nuestras propias funciones, pues esto nos permite ahorrar tiempo, espacio y hará que nuestro código sea mucho más limpio. Pero…

¿Qué es una función?

Una función, no es más que un bloque de código el cual posee un nombre y recibe algunos argumentos de entrada o ninguno, para poder realizar una determinada operación y al final nos retorna un resultado.

Lo mejor de todo, es que este bloque lo podemos llamar todas las veces que queramos.

Cuando usamos funciones dentro de un lenguaje de programación entramos en el conocido paradigma de la programación estructurada cuyas ventajas son:

  1. modularización: divide el programa en diferentes módulos para permitir su lectura y simplificar la complejidad del problema
  2. reutilización: evita que estemos repitiendo constantemente un mismo código, ya que podemos llamar la función tantas veces como lo deseemos.

Como crear funciones en python

Las funciones dentro de python se logran a través de la sentencia def.

La sentencia def en python es una definición la cual es empleada para poder crear funciones propias programadas por el usuario para la modularización y reutilización de códigos. Su sintaxis se muestra a continuación:

def nombre_funcion(parametros_de_entrada):
	"""Docstrings de la función"""
	#Sentencia 1
	#Sentencia 2
	#Sentencia 3
	#....
	return expresion

La sintaxis anterior evidencia diferentes etapas que se pueden destacar al momento de crear una función en python las cuales describimos a continuación:

nombre de la función

El nombre de la función hará referencia del objetivo para la cual fue creado dicho bloque de código. Es una buena práctica escribir este nombre en letras minusculas.

Parámetros de Entrada

Los parámetros de entrada son las variables externas de la función necesarias para la ejecución del programa interno dentro de la función, las cuales el usuario debe proveer al momento del llamado de la función.

¿Qué es el docstring en python?

El docstrings es una documentación conformada por una cadena de caracteres la cual está integrada a todos los objetos dentro de Python y su finalidad es describir en detalle para que sirve y como se usa dicho objeto.

Por lo tanto, como puedes ver en la función, inmediatamente después del definir el nombre, viene el docstring que va a describirle al usuario la finalidad de la función y le mostrará como usar la misma. Es decir como hacer el llamado.

para poder leer el docstring de la función digitamos: help(nombre_funcion)

Sentencias

En esta etapa se elabora el bloque de código de python que contiene la lógica de programación de la función, utilizando los parámetros de entrada que fueron referenciados por el usuario con la finalidad de llegar al resultado esperado.

Qué hace la función return en python

La instrucción return en python termina la ejecución de la función como tal y le devuelve el control a la función de llamada o etapa donde fue llamada la función para que continue con el fluno normal de código.

Con return también podemos retornar el valor esperado de la función para que pueda ser usado posteriormente por el programa que realizó la llamada de la función.

Argumentos y Parámetros

Los argumentos de entrada de una función, pueden ser pasados a través de dos formas: por posición o por nombre.

Por posición es la forma típica con la que se asignan valores a una función y consiste en colocar los parámetros de entrada en el mismo orden en el que fueron definidos dentro de la función:

def suma(a, b):
    """Esta función realiza la suma: c = a + b
    sus llamado se hace
    suma(a,b)"""
    return a + b

c= suma(-3,8)
print("la suma es",c)
la suma es 5

en el ejemplo anterior a=-3 y b=8.

El llamado por nombre consiste en llamar la función especificando el nombre del parámetro de entrada al cual estamos asignando dentro de la función:

def resta(a, b):
    """Esta función realiza la resta: c = a + b
    sus llamado se hace
    resta(a,b)"""
    return a - b

c= resta(b=-3, a=8)
print("la resta es",c)
la resta es 11

Parámetros por defecto

Python permite definir nuestras funciones con parámetros por defecto. En ese caso las funciones vienen precargadas con los parámetros y en caso de que el usuario no especifique ningún parámetro, se usarán estos por defecto.

def resta(a = None, b = None):
    """Esta función realiza la resta: c = a + b
    sus llamado se hace
    resta(a,b)"""
    if a == None or b == None:
        print("Error, debes enviar dos números a la función")
        return
    return a - b

Como se aprecia en el ejemplo anterior el parámetro a y b están precargados con None ( o vacío) y en el caso de que el usuario no coloque alguno de estos dos parámetros, la función entrará en el condicional y desplegará un mensaje de error para el usuario.

Funciones python ejercicios resueltos

Vamos a crear una función que realice un saludo al controlero o controlera que está realizando este curso de python desde cero:

def saludo(nombre):
    print('Hola {}'.format(nombre))
    print('Bienvenidos a nuestro curso de Python')
    print('Del canal de Control Automático Educación')
    

saludo('Fernando')
Hola Fernando
Bienvenidos a nuestro curso de Python
Del canal de Control Automático Educación

Python Scope

Retomando lo aprendido en la creación de funciones dentro de Python, es hora de entender que son los Scope para poder saber cuales variables son modificadas dentro de nuestro script.

Cuando es creada una variable (objeto) en Python, dicha variable SOLO está disponible dentro de la región donde fue creada. Esto se conoce como SCOPE (alcance)

Local Scope en Python

Una variable creada dentro de una función pertenece al ámbito local de esa función y solo se puede usar dentro de esa función.

Note que en las siguientes dos funciones se declara una variable con el mismo nombre x, sin embargo esa varaible solo puede ser empleada dentro de cada función y no es conocida por la otra función a pesar de tener el mismo nombre.

def gravity():
    x = 9.81
    print(x, id(x), sep=' ---> ')
def pi():
    x = 3.1416
    print(x, id(x), sep=' ---> ‘)
pi()
gravity()

print(x)
Local Scope Python

Global Scope Python

Una variable creada en el cuerpo principal del código Python es una variable global y pertenece al SCOPE global.

Las variables globales están disponibles desde cualquier SCOPE, global y local.

N = 6.02e23 #moleculas / mol (Avogrado)
def gravity():
    x = 9.81
    print('Local')
    print(x, id(x), sep=' ---> ')
    print('Global')
    print(N, id(N), sep=' ---> ')
def pi():
    x = 3.1416
    print('Local')
    print(x, id(x), sep=' ---> ')
    print('Global')
    print(N, id(N), sep=' ---> ')
pi()
gravity()
print('Main - Global')
print(N, id(N), sep=' ---> ')

Note que en este ejemplo la variable global N es conocida por las funciones gravity y pi.

Global Scope Python

Si opera con el mismo nombre de variable dentro y fuera de una función, Python las tratará como dos variables separadas, una disponible en el scope global (fuera de la función) y otra disponible en el scope local (dentro de la función):

x = 6.02e23 #moleculas / mol (Avogrado)
def gravity():
    x = 9.81
    print('Local')
    print(x, id(x), sep=' ---> ')
def pi():
    x = 3.1416
    print('Local')
    print(x, id(x), sep=' ---> ')
print('PI')
pi()
print('GRAVITY')
gravity()
print('Main - Global')
print(x, id(x), sep=' ---> ')

Si necesita crear una variable global, dentro de un SCOPE local, se puede usar la palabra clave global. Con esto es posible convertir la variable al scope global.

También puede ser usado cuando se desee modificar una variable global dentro de una función.

def pi():
    global x
    x = 3.1416
    print('Local')
    print(x, id(x), sep=' ---> ')
pi()
print(x, id(x), sep=' ---> ')

Recursión en Python

Cuando trabajamos con funciones es bastante común que una función llame a otra.

En Python, ¡también es posible que una función se llame a sí misma! Se dice que una función que se llama a sí misma es recursiva , y la técnica de emplear una función recursiva se llama recursividad.

Puede parecer extraño que una función se llame a sí misma, pero muchos tipos de problemas de programación se expresan mejor recursivamente por eso es importante aprender sobre la recursividad.

¿Por qué utilizar la recursividad?

La mayoría de los problemas de programación se pueden resolver sin recursividad. Entonces, estrictamente hablando, la recursividad generalmente no es necesaria.

Sin embargo, algunas situaciones se prestan particularmente a una definición autorreferencial. Si estuviera diseñando un algoritmo para manejar un caso de este tipo mediante programación, una solución recursiva probablemente sería más limpia y concisa.

El recorrido de estructuras de datos en forma de árbol es un buen ejemplo. Debido a que se trata de estructuras anidadas, se ajustan fácilmente a una definición recursiva. Es probable que un algoritmo no recursivo para caminar a través de una estructura anidada sea algo torpe, mientras que una solución recursiva será relativamente elegante.

Por otro lado, la recursividad no es para todas las situaciones. Aquí hay algunos otros factores a considerar:

  • Para algunos problemas, una solución recursiva, aunque posible, será más incómoda que elegante.
  • Las implementaciones recursivas a menudo consumen más memoria que las no recursivas.
  • En algunos casos, el uso de recursividad puede resultar en un tiempo de ejecución más lento.

Ejemplo 1 de Recursión en Python

Crear una función recursiva que teme un número positivo como argumento e imprima los números desde dicho argumento hasta cero.

def countdown(n):
    print(n)
    if n > 0:
        countdown(n - 1)
countdown(6)
  • Cuando countdown() se ejecuta por primera vez, Python crea un espacio de nombres y asigna n el valor 6 en ese espacio de nombres (namespace).
  • Luego countdown() se llama a sí mismo recursivamente.
  • La segunda vez que countdown() se ejecuta, el intérprete crea un segundo espacio de nombres a n y lo asigna a 5.
  • Estas dos instancias del nombre n son distintas entre sí y pueden coexistir sin entrar en conflicto porque están en espacios de nombres separados.
  • El caso base ocurre cuando n es cero, en cuyo punto se detiene la recursividad.
  • En la llamada recursiva, el argumento es uno menos que el valor actual de n, por lo que cada recursión se acerca al caso base.

Ejemplo 2 – Factorial Recursivo

Crear una función recursiva que calcule el factorial de un número.

def factorial(n):
    if n == 0 or n == 1:
        return 1
    return n * factorial(n-1)
factorial(4)


Eso es todo por la entrada del dia de hoy, espero les haya gustado y hayan aprendido algo nuevo. Si te ha servido el contenido de esta entrada, de los videos y los códigos de implementación y deseas apoyar mi trabajo invitandome a un café super barato, puedes hacerlo en el siguiente link:

👉 Invitar a Sergio a un Café ☕️

Que esten muy bien, nos vemos en la siguiente entrada.

Entradas relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Comentarios (2)

Hola Andres aun no me queda muy claro la parte de return, devolver el valor.
Gracias , que profesional eres

Responder

Hola Henry, lo que pasa es que cuando creas una función, dicha función tiene su propio Scope, es decir su “mundo a parte” por lo tanto todas las variables y cálculos que se hagan en ella únicamente van a existir en la función y cuando la ejecución del código termina la función y vuelva al programa principal, si nosotros no retornamos nada, el programa principal NO va a saber el resultado de la operación, pues esos cálculos y variables no pertenecen a su mundo, entonces no tiene conocimiento de esto. Con el Return estamos enviando esa información de un Scope para Otro, estamos “comunicando las variables entre ambos mundos”

Responder