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