Usar *args y **kwargs al definir funciones
Las sentencias especiales *args y **kwargs en las definiciones de funciones son usadas para pasar un número variable de argumentos a una función. La forma con un solo asterisco (*args) es usada para pasar como argumento una lista “keyworded” de longitud variable, mientras que la forma con doble asterisco es usada para pasar una lista “non-keyworded” de longitud variable.
A continuación se muestra un ejemplo de como usar la forma “non-keyworded”. En este ejemplo se pasa un argumento formal (posicional) y dos mas de longitud variable:
def probar_argumentos(farg, *args):
print "argumento formal:", farg
for arg in args:
print "otro argumento:", arg
probar_argumentos(1, "dos", 3)
Resultados:
argumento formal: 1
otro argumento: dos
otro argumento: 3
A continuación un ejemplo de como usar la forma keyworded, nuevamente se pasa un argumento formal y dos keyworded de longitud variable
def probar_var_kwargs(farg, **kwargs):
print "argumento formal:", farg
for key in kwargs:
print "otro argumento keyworded: %s: %s" % (key, kwargs[key])
probar_var_kwargs(farg=1, myarg2="dos", myarg3=3)
Resultados:
argumento formal: 1
otro argumento keyworded: myarg2: dos
otro argumento keyworded: myarg3: 3
Usar *args y **kwargs al llamar funciones
Esta sentencias especiales se pueden usar no solo en la definicion de funciones sino también al llamarlas. por ejemplo:
def probar_var_args_call(arg1, arg2, arg3):
print "argumento1:", arg1
print "argumento2:", arg2
print "argumento3:", arg3
args = ("dos", 3)
probar_var_args_call(1, *args)
Resultados:
argumento1: 1
argumento2: dos
argumento3: 3
Si queremos usar la forma keyworded al llamar una funcion lo hacemos de la siguiente forma:
def probar_var_args_call(arg1, arg2, arg3):
print "argumento1:", arg1
print "argumento2:", arg2
print "argumento3:", arg3
kwargs = {"arg3": 3, "arg2": "dos"}
probar_var_args_call(1, **kwargs)
Resultados:
argumento1: 1
argumento2: dos
argumento3: 3
Articulo parafraseado de: SaltyCrane Blog
![]()
5 comentarios
milmazz escribió:
2 diciembre, 2010 a las 5:06 AM (UTC -4.5)
Hola Diego, primero que nada, felicidades por el inicio del blog, además, porque la temática de tu blog será sobre dos lenguajes que realmente aprecio y uso regularmente, me refiero a Python y Perl.
Respecto al artículo muy didáctico en los puntos que planteas. Sin embargo, sería recomendable que al hacer una traducción o parafraseo indiques la fuente o comunicarte con el autor indicándole que adaptaste parte de su trabajo, seguramente él lo aceptara y en muchos casos te enlazará desde la versión original del artículo.
Dicho lo anterior, por favor, señala la fuente: How to use *args and **kwargs in Python.
reg3x escribió:
2 diciembre, 2010 a las 2:05 PM (UTC -4.5)
Muchas gracias milmazz por tus felicitaciones , tomaré tu sugerencia , debo agregar que además de estas dos categorías que ayer inicié. Planteo crear una de ‘Herramientas GNU’ y a largo plazo otra de ‘Hardware Libre’ con algunos montajes (espero ponerme disciplinado con el proyecto pinguinove). Nuevamente gracias por tu visita
computer support escribió:
31 diciembre, 2010 a las 1:02 PM (UTC -4.5)
Couldnt agree more with that, very attractive article
Nicolas Gutierrez escribió:
4 febrero, 2011 a las 11:00 AM (UTC -4.5)
Nice info : ]
reg3x escribió:
4 febrero, 2011 a las 11:05 AM (UTC -4.5)
tks dude