pase de parametros

Soto scots4ever en gmail.com
Lun Oct 19 12:02:45 CEST 2009


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 en s

El 19 de octubre de 2009 11:02, Chema Cortes <pych3m4 en gmail.com> escribió:

> El día 19 de octubre de 2009 04:18,  <jlrivero en ucf.edu.cu> 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
------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


Más información sobre la lista de distribución Python-es