Re: pase de parametros
Chema Cortes <[email protected]>
| Newsgroups | gmane.comp.python.general.castellano |
|---|---|
| Message-ID | <[email protected]> |
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). _______________________________________________ Lista de correo Python-es http://listas.aditel.org/listinfo/python-es FAQ: http://listas.aditel.org/faqpyes