Python Para Principiantes (IV) - Funciones y Módulos (I)

Funciones y Módulos

Índice:

Conceptos fundamentales para entender las funciones

Antes de entrar de lleno en el tema “funciones” vamos a hablar de Reutilización del código concepto fundamental a la hora de programar.

A medida que los programas se “hacen grandes” se tornan más difíciles de mantener, motivo por el cual, resulta indispensable no repetirse a uno mismo, es decir: tratar de evitar escribir el mismo fragmento de código en múltiples ocasiones.

Esta presenta, al menos, dos ventajas:

  • La modularidad del programa: Esto sería dividir el programa principal en una serie de subprogramas o módulos más simples que facilitan la lectura, corrección y mantenimiento del programa.
  • Reutilización del código: Es crear fragmentos de código, mediante funciones, que permitan ser llamados en distintos momentos del programa sin necesidad de escribir el código original nuevamente.

Funciones

Ya conocimos, en encuentros anteriores, algunas funciones.

print(), int(), float(), str(), type(), range()

Estás funciones están predefinidas en la biblioteca estándar de Python.

Ahora veremos como crear nuestras propias funciones.

Declarar una función

Para declarar una función debemos hacer uso de la palabra reservada def seguida del nombre la función, el nombre debe ser descriptivo de la misma, siguiendo las mismas reglas de nombres que se aplican a las variables.

1
2
3
4
5
#Declarando una función
def hola():
    print("hola") #Este código se ejecuta cuando se llama/invoca a la función hola
    
hola() #Llamado o invocación a la función

Recordar que se debe tener declarada la función antes de invocarla, caso contrario se generará un error.

Parámetros

Una función puede o no recibir datos. A estos datos los llamamos parámetros.

Le decimos argumento al dato enviado.

1
2
3
4
5
#Función que recibe un parámetro
def hola(nombre): 
    print("Hola", nombre)
    
hola("Juan") #Le enviamos el argumento "Juan"
1
2
3
4
5
6
#Función que recibe dos parámetros
def mostrar_suma(x,y): 
    print(x+y)
    
mostrar_suma(10,5)  #Invocamos a la función y le enviamos 2 argumentos. 
                    #Dentro de la función, el primer argumento va a ser x, el segundo y
  • Los parámetros deben estar separados por comas (,).
  • También es importante el orden en el que los argumentos son enviados.
  • Las funciones pueden recibir, además de los valores como vimos en los ejemplos anteriores, cualquier estructura de datos (variables, listas, diccionarios, etc).
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#Función que recibe dos parámetros
def muestra_cuadrado(b, e):
    print(b**e)

#Declaro dos variables con sus valores correspondientes
base = 5
exponente = 2

#Invoco a la función
muestra_cuadrado(base, exponente) #Le envio las variables como "argumentos"
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#Función que recibe una lista como parámetro
def muestra_lista(l):
    for x in l:
        print(x) #Muestra el contenido de la lista
        
#Declaro una lista con elementos
alumnos = ["Marcelo", "Dan", "Debora", "Alex"]

#Invoco a la función
muestra_lista(alumnos) #Le envio la lista alumnos como argumento

Retorno en una función

Como vimos las funciones nos permiten modular el código y ejecutar ciertas tareas pero también permiten, una vez realizado el proceso que en ellas se describe, retornar datos.

Para indicar que debe retornar un dato usamos la palabra reservada return

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#Función que recibe dos parámetros
def dame_cuadrado(b, e):
    return(b**e) #retorna el resultado de b elevado a e

#Declaro dos variables con sus valores correspondientes
base = 5
exponente = 2

#Declaro una variable que va a guardar el retorno de la función
cuadrado = dame_cuadrado(base, exponente) #Le envio las variables como "argumentos"
print(cuadrado)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#Función que recibe retorna verdadero o falso
def esMayor(x,y): #Retorna verdadero si x es mayor que y sino retorna falso
    if(x>y):
        return True
    else:
        return False

n1 = 25
n2 = 1

#Declaramos una variable resultado que guarda el retorno de la función esMayor
resultado = esMayor(n1,n2) #Le enviamos dos argumentos
print(resultado)

Parámetros por defecto

A veces queremos que la función tenga ciertos parámetros definidos.

1
2
3
4
5
def saludo(cadena, texto="bienvenido"): #Esta función recibe dos parámetros pero uno ya se encuentra definido
    print(cadena,texto)

saludo("Juan")

1
2
3
4
def saludo(texto="Bienvenido"): #Esta función recibe un parámetro que ya se encuentra definido
    print(texto)                #Dicho parámetro se puede sobreescribir

saludo()

Argumentos indefinidos

Cuando no sabemos cuantos argumentos le vamos a enviar a la función podemos usar el símbolo * delante del parámetro.

1
2
3
4
5
#Declaramos una función que recibe multiples argumentos (no sabemos cuantos)
def miFuncion(*args):    
    print(args) #args es una tupla
    
miFuncion("hola",132)

Cuando enviamos argumentos por clave-valor pero, no sabemos cuantos elementos, podemos hacer algo similar al ejemplo anterior. En este caso usamos ** (dos) asteriscos delante del parámetro

1
2
3
4
5
#Declaramos una función que recibe multiples argumentos clave-valor(no sabemos cuantos)
def miFuncion(**args):   
    print(args) #args es un diccionario
    
miFuncion(nombre = "Alejando", apellido = "Moreno")

Funciones vacías

Las funciones no pueden estar vacías porque darán un error.

1
2
3
def miFuncion():
    
miFuncion()

Si queremos, por algún motivo, que la función se declare vacía usamos la palabra reservada pass

1
2
3
4
def miFuncion():
    pass

miFuncion()

Comentar una función

Documentar una función es una parte muy importante a la hora de escribir código. Debe servir de guía tanto para quien escribe el programa como para quien lo lee.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
def muestra_cuadrado(b, e):
    """Muestra el resultado de b a la e en pantalla.
    b = base
    e = exponente    
    """
    print(b**e)

#Declaro dos variables con sus valores correspondientes
base = 5
exponente = 2

#Invoco a la función
muestra_cuadrado(base, exponente) #Le envio las variables como "argumentos"

Algunas funciones útiles

Vamos a conocer algunas funciones pre definidas en el lenguaje Python.

Funciones para cadenas

lower()

Convierte todos los caracteres a minúsculas.

1
2
cadena = "HOLA MUNDO"
print(cadena.lower())

upper()

Convierte todos los caracteres a mayúsculas.

1
2
cadena = "hola mundo"
print(cadena.upper())

replace(valor_actual,valor_nuevo)

Reemplaza valor actual por el valor nuevo.

1
2
3
cadena = "Hoy es un día feo"
cadena = cadena.replace("feo","lindo")
print(cadena)

split()

Convierte la cadena en una lista

1
2
3
cadena = "Club de software libre"
cadena = cadena.split()
print(cadena)

startswith(valor)

Retorna True si la cadena comienza con el valor indicado caso contrario Retorna false.

1
2
cadena = "Taller de python"
print(cadena.startswith("Taller"))

endswith(valor)

Retorna True si la cadena termina con el valor indicado caso contrario Retorna false.

1
2
cadena = "Taller de python"
print(cadena.endswith("python"))

Funciones numéricas

min()

Retorna el valor mínimo dada una serie de números.

1
print(min(-55,139,2,54,0.24,11))

max()

Retorna el valor máximo dada una serie de números.

1
print(max(100,-1,109,19932,3,-99))

abs(valor)

Retorna el valor absoluto de un número.

1
print(abs(-44))

sum(lista)

Dada una lista con valores numéricos, retorna la suma de todos los elementos

1
print(sum([10, 10, 10, 1]))

Funciones para diccionarios

in ()

Retorna True si la clave existe en ese diccionario caso contrario retornará False

1
2
3
4
5
#declaro un diccionario
miDiccionario = {"Nombre":"Saul", "Apellido":"García"}
#busco una clave
if ("Nombre" in miDiccionario):
    print("Clave existente")
1
2
3
4
5
#declaro un diccionario
miDiccionario = {"Nombre":"Saul", "Apellido":"García"}
#si la clave no existe 
if ("DNI" not in miDiccionario): #Uso de not in
    print("Clave no existente")

get(clave)

Retorna el valor de una clave en el diccionario, si no existe retorna None

1
2
3
4
#declaro un diccionario
miDiccionario = {"Nombre":"Saul", "Apellido":"García"}
valorNombre = miDiccionario.get("Nombre")
print(valorNombre)
updatedupdated2021-02-032021-02-03