---
title: *args y **kwargs &#8211; python, con ejemplos
url: https://jarroba.com/args-kwargs-python-ejemplos/
author: Richard [Admin Jarroba]
date: 2018-02-17
modified: 2026-10-23
language: es
license: CC BY-NC-SA 3.0 (https://creativecommons.org/licenses/by-nc-sa/3.0/) — attribution: "*args y **kwargs &#8211; python, con ejemplos", Richard [Admin Jarroba], jarroba.com
categories: Lenguajes de Programación
tags: args, kwargs, python
---

# *args y **kwargs &#8211; python, con ejemplos

> Algo que todos pasamos por alto al aprender Python y que más llama la atención: las funciones (o métodos) que reciben como parámetro *args y **kwargs.

Cuando empiezas con algún lenguaje de programación; como es el caso de Python, solemos aprenderlo de forma práctica (programando), pasando por alto el aprendizaje teórico del propio lenguaje. Una de las cosas que todos hemos pasado por alto al empezar a aprender Python y que más llaman la atención, son las funciones (o métodos) que tienen como parámetro ****args*** y *****kwargs***. Para entender su funcionamiento es necesario que previamente tengas claro los conceptos de [Lista](https://jarroba.com/list-python-ejemplos/) y [Diccionario](https://jarroba.com/diccionario-python-ejemplos/) en Python.

 

Nota

****args:*** es una lista de argumentos, como argumentos posicionales.  
   
 *****kwargs:*** es un diccionario cuyas claves se convierten en parámetros y sus valores en los argumentos de los parámetros.

 

Hay que destacar que la sintaxis es * y **, siendo los nombres de args y kwargs una simple convención, pero no es un requisito estricto su uso; es decir, que si a una función le pasamos como argumento *mi_lista o **mi_diccionario tendrá el mismo efecto.

 

*args, se usará cuando no se esté seguro de cuántos argumentos se tengan que pasar a la función; es decir, te permite pasar una cantidad arbitraria de argumentos. Veamos a continuación un ejemplo:

 

```py
def read_list_args(*args):
    for count, arg in enumerate(args):
        print '%d - %s' % (count, arg)

print 'First'
read_list_args('Ricardo', 'jarroba.com')

print 'Second'
read_list_args('Ricardo', 23, 'Ramon', [1, 2, 3], 'jarroba.com')
```

 

Como podemos observar, llamamos a la función con distinto número de argumentos, siendo la salida de la función la siguiente:

 

```text
First
0 - Ricardo
1 - jarroba.com
Second
0 - Ricardo
1 - 23
2 - Ramon
3 - [1, 2, 3]
4 - jarroba.com
```

 

De forma similar cuando no se sepa el número de argumentos que va a recibir una función, **kwargs acepta argumento para parámetros con nombres que no han sido definidos de antemano. Veamos a continuación un ejemplo:

 

```py
def read_dict_args(**kwargs):
    for key, value in kwargs.items():
        print '%s - %s' % (key, value)

print 'First'
read_dict_args(name1='Ricardo', name2='Ramon', web='jarroba.com')

print 'Second'
read_dict_args(Team='FC Barcelona', player='Iniesta', demarcation='Right winger', number=8)
```

 

Como salida de este código tenemos lo siguiente:

 

```text
First
web - jarroba.com
name2 - Ramon
name1 - Ricardo
Second
player - Iniesta
number - 8
demarcation - Right winger
Team - FC Barcelona
```

 

Tanto * y ** pueden ser usados juntos y junto a otros parámetros definidos en la función, pero en este caso sí que importa la precedencia. En primer lugar van los parámetros definidos para la función, en segundo lugar *args y en tercer lugar **kwargs:

 

```py
def do_something(a, b, *args, **kwargs):
```

 

Nota

 

#### ¿Qué es un parámetro y qué es un argumento?

 

En este post se ha utilizado en varias ocasiones las palabras parámetro y argumento. Es importante saber la diferencia que hay entre estas dos palabras ya que es relativamente sencillo confundirlas y mucha gente cree que son sinónimos dentro del contexto de la programación:

 
- **Parámetro:** Se especifican en la definición de la función o método.
- **Argumento:** Es el valor que se le asigna a los parámetros cuando se llama a la función.

 

```py
def something(parameter1, parameter2):
...

something(parameter1=argument1, parameter2=argument2)
```

 

### Bibliografía

 

- [stackoverflow.com/questions/3394835/args-and-kwargs](https://stackoverflow.com/questions/3394835/args-and-kwargs)
