Re: pase de parametros

Soto <[email protected]>
Newsgroups gmane.comp.python.general.castellano
Message-ID <[email protected]>
Muchas gracias gente. Varias veces me había planteado la misma duda de como
pasar argumentos mediantes campos nombres, sabía que los diccionarios iban a
tener parte de responsabilidad pero no me puse a hacerlo.

Buen trabajo a tod@s

El 19 de octubre de 2009 11:02, Chema Cortes <[email protected]> escribió:

> El día 19 de octubre de 2009 04:18,  <[email protected]> escribió:
>
> > Hola, estoy un poco enredado con el pase de parámetros a funciones, he
> visto que se
> > pasan parámetros nombrados y no nombrados, y si quiero pasr lo que sea lo
> hago asi:
> > def func (*args, **kwd)
> > Si hago def func(*arg) va a tomar lo que le pase como una tupla, y si
> paso def
> > func(**kwd) seria un diccionario
> > Pueden debatir un poco esto
>
> Se dice que los argumentos de una función pueden ser "posicionales" o
> "por clave". Los argumentos posicionales se van tomando por orden,
> mientras los argumentos por clave se toman según el nombre del
> argumento; la única condición es que los argumentos posicionales
> tienen que ir delante de los argumentos por clave.
>
> Por ejemplo, si defino una función así:
>
> def MiFunc(arg1, arg2, arg3, arg4, arg5):
>  print arg1,arg2, arg3, arg4, arg5
>
> podría invocarla como
>
> MiFunc(1,2,3,4,5)
> MiFunc(arg5=5,arg4=4,arg2=2,arg3=3,arg1=1)
> MiFunc(1,2,3,arg5=5,arg4=4)
>
> Todos estos casos son equivalentes. Estaría prohibido que haya
> argumentos por clave delante de los posicionales:
>
> MiFunc(arg5=5,1,2,3,4)   #ERROR
>
>
> Si el número de argumentos es variable, puedes recoger los argumentos
> adicionales,  posicionales o por clave, de la siguiente manera:
>
> def MiFunc(arg1, arg2, arg3, *args, **kwargs)
>  print arg1, arg2, arg3, args, kwargs
>
>
> Para invocar a esta función necesitas siempre pasar tres argumentos, y
> luego los que quieras adicionales. En args (tupla) iran los argumentos
> posicionales adicionales y en kwargs (diccionario) los argumentos por
> clave adicionales. La única regla que tienes que cuidar al invocar la
> función es que los argumentos posicionales siempre van delante de los
> argumentos por clave.
>
> Ejemplos:
>
> MiFunc(1,2,3)  -->  arg1=1, arg2=2, arg3=3, args=(), kwargs={}
> MiFunc(1,2,3,4,5) --> arg1=1, arg2=2, arg3=3, args=(4,5), kwargs={}
> MiFunc(1,2,3,4,arg5=5) --> arg1=1, arg2=2, arg3=3, args=(4,),
> kwargs={"arg5":5}
> MiFunc(1,2,arg3=3,arg4=4,arg5=5) --> arg1=1, arg2=2, arg3=3, args=(),
> kwargs={"arg4":4,"arg5":5}
> MiFunc(1,2,3,4,"Hola",n=5,s="Mundo") --> arg1=1, arg2=2, arg3=3,
> args=(4,"Hola"), kwargs={"n":5, "s":"Mundo"}
>
> Puedes probar tú mismo diferentes combinaciones a ver qué sale.
>
> Si no quieres paso de argumentos variable por posición o por clave tan
> sólo pon uno de los dos mecanismos:
>
> def MiFunc(*args)   #paso de argumentos sólo por posición
> def MiFunc(**kwargs)   #paso de argumentos sólo por clave
>
>
> Por completar, se podría hablar de qué pasa con los argumentos con
> valores por defecto y de cómo se asignan los argumentos posicionales a
> tuplas, pero te lo dejo para que lo descubras por tus propios medios
> (pregunta por aquí si no te aclaras).
>


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - -
Todo hombre es tonto de remate al menos durante cinco minutos al día.
La sabiduría consiste en no rebasar el límite.

                                                        Elbert Hubbard

_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.