«

»

dic
01

Como usar *args y **kwargs en Python

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

  1. milmazz escribió:

    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.

    1. reg3x escribió:

      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

  2. computer support escribió:

    Couldnt agree more with that, very attractive article

  3. Nicolas Gutierrez escribió:

    Nice info : ]

    1. reg3x escribió:

      tks dude ;)

Deja un comentario

Tu email nunca se publicará.

Puedes utilizar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>