Introducción
En Python, una función es un bloque de código organizado y reutilizable que se utiliza para realizar una acción única y relacionada. Las funciones proporcionan una mejor modularidad para su aplicación y un alto grado de reutilización de código.
En este laboratorio, aprenderá los fundamentos de la creación y el uso de funciones en Python. Practicará la definición de funciones que aceptan argumentos, el uso de argumentos de palabra clave (keyword arguments) para mayor claridad, el retorno de valores, la comprensión de la diferencia entre los ámbitos de variables locales y globales, y la creación de funciones anónimas concisas con lambda.
Argumentos de Función
En este paso, aprenderás a definir una función que acepta argumentos. Una función puede tomar argumentos, que son valores que pasas a la función cuando la llamas.
Nota: Si no estás familiarizado con el uso de WebIDE (similar a VS Code), por favor, apréndelo primero en este laboratorio.
Creemos una función que tome un argumento name e imprima un saludo personalizado.
Primero, abre el archivo arguments.py desde el explorador de archivos a la izquierda.
A continuación, copia y pega el siguiente código en el archivo arguments.py. Este código define una función say_hello que toma un argumento, name.
## Define a function that takes one argument
def say_hello(name):
print(f'Hello {name}')
## Call the function with a string argument
say_hello('Carlos')
say_hello('Wanda')
say_hello('Rose')
Ahora, ejecutemos el script. Abre una terminal en el WebIDE y ejecuta el siguiente comando:
python3 arguments.py
Deberías ver la función siendo llamada con diferentes nombres, produciendo un saludo único para cada uno.
Hello Carlos
Hello Wanda
Hello Rose
Esto demuestra cómo los argumentos hacen que las funciones sean flexibles y reutilizables.
Argumentos de Palabra Clave (Keyword Arguments)
En este paso, aprenderá a usar argumentos de palabra clave (keyword arguments) para mejorar la legibilidad del código. Cuando una función tiene múltiples parámetros, puede especificar a qué parámetro corresponde cada argumento utilizando el nombre del parámetro. Esto se denomina argumento de palabra clave.
Cuando utiliza argumentos posicionales, el orden en que los pasa es importante. Con los argumentos de palabra clave, el orden no importa, lo que hace que su código sea más explícito y fácil de entender.
Abra el archivo keywords.py desde el explorador de archivos. Cópielo y pegue el siguiente código en él.
## Function with multiple parameters
def say_hi(name, greeting):
print(f"{greeting} {name}")
## Positional arguments: order matters
print("Calling with positional arguments:")
say_hi('John', 'Hello')
## Keyword arguments: order doesn't matter, more readable
print("\nCalling with keyword arguments:")
say_hi(name='Anna', greeting='Hi')
Ahora, ejecute el script desde la terminal:
python3 keywords.py
Verá la salida de ambas llamadas a la función. Observe cómo los argumentos de palabra clave le permiten pasar valores en cualquier orden.
Calling with positional arguments:
Hello John
Calling with keyword arguments:
Hi Anna
Valores de Retorno (Return Values)
En este paso, explorará cómo usar la instrucción return para hacer que una función produzca una salida. Mientras que print() muestra un valor en la consola, return envía un valor de vuelta desde la función. Este valor devuelto puede almacenarse en una variable o utilizarse en otras expresiones.
Creemos una función que tome dos números, los sume y devuelva el resultado.
Abra el archivo returns.py y añada el siguiente código. La función sum_two_numbers calcula la suma y utiliza la palabra clave return para emitir el resultado.
## Function that returns a value using return statement
def sum_two_numbers(number_1, number_2):
return number_1 + number_2
## Call function and store the returned value
result = sum_two_numbers(7, 8)
print(result)
Ejecute el script en la terminal:
python3 returns.py
La salida será el valor que devolvió la función, el cual se almacenó en la variable result y luego se imprimió.
15
Ámbito Local y Global (Local and Global Scope)
En este paso, descubrirá la diferencia entre los ámbitos de variables locales y globales. El ámbito de una variable determina dónde en su código se puede acceder a ella.
- Ámbito Global: Las variables definidas fuera de cualquier función están en el ámbito global y se puede acceder a ellas desde cualquier lugar del código, incluso dentro de las funciones.
- Ámbito Local: Las variables creadas dentro de una función están en el ámbito local de esa función. Solo existen dentro de esa función y no se puede acceder a ellas desde el exterior.
Primero veamos qué sucede cuando intenta acceder a una variable local desde el ámbito global. Si ejecutara el siguiente código, generaría un NameError porque local_variable no está definida en el ámbito global.
## This code will cause an error
global_variable = 'I am available everywhere'
def some_function():
print(global_variable)
local_variable = "only available within this function"
print(local_variable)
## This will raise NameError because local_variable doesn't exist here
## print(local_variable)
La Declaración global
Si necesita modificar una variable global desde dentro de una función, debe indicárselo explícitamente a Python con la declaración global.
Abra el archivo scope.py y añada el siguiente código. Aquí, la función spam utiliza la palabra clave global para modificar la variable global eggs.
## Use 'global' keyword to modify global variable from inside function
def spam():
global eggs ## Declare that we're modifying the global variable
eggs = 'spam' ## This changes the global variable
eggs = 'global'
print(f"Before calling spam(), eggs is: {eggs}")
spam() ## Function modifies global variable
print(f"After calling spam(), eggs is: {eggs}")
Ahora, ejecute el script:
python3 scope.py
Observe la salida. El valor de la variable global eggs se cambia permanentemente con la llamada a la función.
Before calling spam(), eggs is: global
After calling spam(), eggs is: spam
Funciones Lambda (Lambda Functions)
En este paso, aprenderá a crear funciones anónimas de una sola línea utilizando la palabra clave lambda. Una función lambda puede tener cualquier número de argumentos, pero solo puede tener una expresión. Son útiles para crear funciones pequeñas y temporales sin la sobrecarga de una definición de función estándar con def.
Por ejemplo, una función regular para sumar dos números:
## Regular function definition
def add(x, y):
return x + y
Esto es equivalente a la siguiente función lambda:
## Lambda function: anonymous function defined in one line
add = lambda x, y: x + y
Las lambdas también pueden funcionar como clausuras léxicas (lexical closures), lo que significa que pueden "recordar" un valor del ámbito circundante donde fueron creadas. Crearemos una función que devuelve una lambda.
Abra el archivo lambdas.py y añada el siguiente código. La función make_adder toma un número n y devuelve una nueva función lambda que suma n a cualquier número x.
## Lambda closure: lambda function that captures a variable from the outer scope
def make_adder(n):
return lambda x: x + n ## Lambda captures 'n' from the outer function
## Create a function that adds 3
plus_3 = make_adder(3)
## Use the new function
result = plus_3(4) ## This will be 4 + 3
print(result)
Ejecute el script desde su terminal:
python3 lambdas.py
La salida muestra el resultado de llamar a la función lambda que fue creada y devuelta por make_adder.
7
También puede crear otros sumadores, por ejemplo, plus_5 = make_adder(5), lo que crearía una función que suma 5 a su argumento.
Resumen
En este laboratorio, ha explorado los conceptos centrales de las funciones en Python. Aprendió a definir funciones y a pasarles información utilizando argumentos. Practicó el uso de argumentos posicionales y de palabra clave (keyword arguments) para hacer más claras sus llamadas a funciones. También aprendió a hacer que las funciones produzcan resultados con la declaración return, cómo gestionar la accesibilidad de las variables con los ámbitos local y global, y cómo usar la palabra clave global para modificar variables fuera de una función. Finalmente, se le presentó el poder y la concisión de las funciones anónimas lambda para crear funciones simples de una sola línea y clausuras (closures).



