Argumentos Args y Kwargs en Python

PythonBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderás sobre *args y **kwargs en Python. Estas sintaxis especiales pueden parecer intimidantes al principio, pero son sencillas de entender y proporcionan una forma poderosa de hacer que tus funciones sean más flexibles. Aprenderás a definir funciones que pueden aceptar un número variable de argumentos, lo cual es una característica común y útil en muchos programas y librerías de Python.

Args y Kwargs

En este paso, aprenderás la sintaxis básica de *args y **kwargs. Estos se utilizan en las definiciones de funciones para permitir pasar un número indefinido de argumentos. *args es para argumentos posicionales (sin palabra clave), mientras que **kwargs es para argumentos de palabra clave (keyword arguments).

Nota: Si no estás familiarizado con el uso de WebIDE (similar a VS Code), por favor, apréndelo primero en este laboratorio.

Primero, veamos cómo definir una función que puede aceptar cualquier combinación de argumentos. En el explorador de archivos de la izquierda, encuentra el archivo main.py ubicado en el directorio ~/project y ábrelo en el editor.

Añade el siguiente código a main.py:

## Define una función que acepta cualquier número de argumentos posicionales y de palabra clave
def some_function(*args, **kwargs):
    print("This function can accept any arguments.")
    print(f"Received positional arguments: {args}")
    print(f"Received keyword arguments: {kwargs}")
    print("-" * 20)

## Llamada con cualquier número de argumentos posicionales
some_function('arg1', 'arg2', 'arg3')

## Llamada con cualquier número de argumentos de palabra clave
some_function(key1='arg1', key2='arg2', key3='arg3')

## Llamada con argumentos tanto posicionales como de palabra clave
some_function('positional_arg', key1='keyword_arg')

## O llamada sin argumentos
some_function()

Es importante notar que args y kwargs son solo convenciones de nomenclatura. El asterisco simple (*) y el doble asterisco (**) son la sintaxis real que realiza el trabajo. Sin embargo, seguir la convención se considera una buena práctica en la comunidad de Python.

Ahora, ejecuta el script abriendo una terminal en el WebIDE y ejecutando el siguiente comando:

python3 main.py

Deberías ver la siguiente salida, que demuestra cómo la función maneja las diferentes llamadas:

This function can accept any arguments.
Received positional arguments: ('arg1', 'arg2', 'arg3')
Received keyword arguments: {}
--------------------
This function can accept any arguments.
Received positional arguments: ()
Received keyword arguments: {'key1': 'arg1', 'key2': 'arg2', 'key3': 'arg3'}
--------------------
This function can accept any arguments.
Received positional arguments: ('positional_arg',)
Received keyword arguments: {'key1': 'keyword_arg'}
--------------------
This function can accept any arguments.
Received positional arguments: ()
Received keyword arguments: {}
--------------------

Esto muestra que *args recopila los argumentos posicionales en una tupla y **kwargs recopila los argumentos de palabra clave en un diccionario.

args

En este paso, te centrarás específicamente en *args. Esta sintaxis permite que una función acepte un número arbitrario de argumentos posicionales. Estos argumentos se recopilan en una tupla (tuple).

Borra el contenido anterior de main.py y añade el siguiente código. Este ejemplo define una función que toma *args e imprime los argumentos que recibe, junto con su tipo.

## *args collects positional arguments into a tuple
def some_function(*args):
    print(f'Arguments passed: {args} as {type(args)}')

## Pass multiple arguments - they'll be collected into the args tuple
some_function('arg1', 'arg2', 'arg3')

En este código, *args en la firma de la función le indica a Python que agrupe todos los argumentos posicionales adicionales pasados a some_function y los coloque en una tupla llamada args.

Ahora, ejecuta el script desde la terminal:

python3 main.py

La salida confirmará que los argumentos se pasaron como una tupla:

Arguments passed: ('arg1', 'arg2', 'arg3') as <class 'tuple'>

Esto demuestra cómo *args proporciona una forma sencilla de manejar un número variable de entradas sin tener que definir cada una como un parámetro separado.

kwargs

En este paso, aprenderás a usar **kwargs. Esta sintaxis se utiliza para recopilar un número arbitrario de argumentos de palabra clave (keyword arguments) en un diccionario (dictionary). Esto es útil cuando deseas manejar argumentos con nombre que no has definido de antemano.

Borra el contenido de main.py y añade el siguiente código. Este ejemplo define una función que acepta **kwargs e imprime los argumentos de palabra clave recopilados y su tipo.

## **kwargs collects keyword arguments into a dictionary
def some_function(**kwargs):
    print(f'keywords: {kwargs} as {type(kwargs)}')

## Pass keyword arguments - they'll be collected into the kwargs dict
some_function(key1='arg1', key2='arg2')

Aquí, **kwargs en la firma de la función le indica a Python que recopile todos los argumentos de palabra clave pasados a some_function en un diccionario llamado kwargs. Las claves del diccionario son los nombres de los argumentos y los valores son los valores de los argumentos.

Ejecuta el script desde la terminal:

python3 main.py

La salida mostrará que los argumentos de palabra clave se han recopilado en un diccionario:

keywords: {'key1': 'arg1', 'key2': 'arg2'} as <class 'dict'>

Esta característica se utiliza ampliamente en Python para funciones que necesitan pasar opciones o configuraciones, permitiendo llamadas a funciones limpias y legibles.

Resumen

En este laboratorio, has aprendido a usar *args y **kwargs en Python para crear funciones más flexibles.

Aprendiste que:

  • *args recopila un número variable de argumentos posicionales en una tupla (tuple).
  • **kwargs recopila un número variable de argumentos de palabra clave (keyword arguments) en un diccionario (dictionary).
  • args y kwargs son nombres convencionales, pero la sintaxis * y ** es lo que habilita esta funcionalidad.

Dominar *args y **kwargs es un paso clave para escribir código Python más avanzado y reutilizable. Ahora puedes crear funciones que son más adaptables a diferentes tipos de entrada.