Foros del Web » Programando para Internet » Python »

Duda sobre función con número variable de argumentos

Estas en el tema de Duda sobre función con número variable de argumentos en el foro de Python en Foros del Web. Según el libro: "Para defnir funciones con un número variable de argumentos colocamos un último parámetro para la función cuyo nombre debe precederse de un ...
  #1 (permalink)  
Antiguo 20/09/2009, 15:33
Avatar de lufe  
Fecha de Ingreso: mayo-2009
Mensajes: 294
Antigüedad: 14 años, 10 meses
Puntos: 15
Duda sobre función con número variable de argumentos

Según el libro:

"Para defnir funciones con un número variable de argumentos colocamos un último parámetro para la función cuyo nombre debe precederse de un signo *:

def varios(param1, param2, *otros):
for val in otros:
print val

varios(1, 2)
varios(1, 2, 3)
varios(1, 2, 3, 4)

Esta sintaxis funciona creando una tupla (de nombre otros en el
ejemplo) en la que se almacenan los valores de todos los parámetros
extra pasados como argumento. Para la primera llamada, varios(1, 2),
la tupla otros estaría vacía dado que no se han pasado más parámetros
que los dos defnidos por defecto, por lo tanto no se imprimiría nada.
En la segunda llamada otros valdría (3, ), y en la tercera (3, 4)."

Sin embargo si yo ejecuto el código:

Código:
def varios(param1, param2, *otros):
    for val in otros:
        print val

varios(1, 2)
varios(1, 2, 3)
varios(1, 2, 3, 4)
Obtengo:

3
3
4

y no

3
34
  #2 (permalink)  
Antiguo 20/09/2009, 21:53
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Duda sobre función con número variable de argumentos

a mi me funciona perfectamente, con salidas normales como 3 y 3, 4

igual puedes probar con el siguiente código
Código python:
Ver original
  1. def varios(*argv): print argv

varios() -> ()
varios(3) -> (3, )
varios(3, 4) -> (3, 4)
y asi sucesivamente
  #3 (permalink)  
Antiguo 21/09/2009, 09:19
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Duda sobre función con número variable de argumentos

Código python:
Ver original
  1. def varios(param1, param2, *otros):
  2.     for val in otros:
  3.         print val
  4.  
  5. varios(1, 2)
  6. varios(1, 2, 3)
  7. varios(1, 2, 3, 4)

Lo que ese código hace es iterar sobre la tupla otros.
En la primera llamada a la función, otros es una tupla vacía, por lo que no se imprime nada.
En la segunda, otros = (3), se imprime el 3.
En la tercera, otros = (3,4), al iterar se imprime en una línea el 3 y en otra el 4.

Creo que el comportamiento que buscas es
Código python:
Ver original
  1. print otros
en vez del for.


Saludos.
  #4 (permalink)  
Antiguo 21/09/2009, 09:37
Avatar de lufe  
Fecha de Ingreso: mayo-2009
Mensajes: 294
Antigüedad: 14 años, 10 meses
Puntos: 15
Respuesta: Duda sobre función con número variable de argumentos

Cita:
Iniciado por AlvaroG Ver Mensaje
Creo que el comportamiento que buscas es
Código python:
Ver original
  1. print otros
en vez del for.


Saludos.

Correcto, de esta forma

Código:
def varios(param1, param2, *otros):
    print otros
   

varios(1, 2)
varios(1, 2, 3)
varios(1, 2, 3, 4)
Obtengo:

()
(3,)
(3, 4)


Gracias!
  #5 (permalink)  
Antiguo 21/09/2009, 09:41
Avatar de lufe  
Fecha de Ingreso: mayo-2009
Mensajes: 294
Antigüedad: 14 años, 10 meses
Puntos: 15
Respuesta: Duda sobre función con número variable de argumentos

Cita:
Iniciado por razpeitia Ver Mensaje
a mi me funciona perfectamente, con salidas normales como 3 y 3, 4

igual puedes probar con el siguiente código
Código python:
Ver original
  1. def varios(*argv): print argv

varios() -> ()
varios(3) -> (3, )
varios(3, 4) -> (3, 4)
y asi sucesivamente
Si sustituyo
def varios(param1, param2, *otros):


por
def varios(*argv): print argv

me da

for val in varios:
^
SyntaxError: mismatched input '' expecting EOF
  #6 (permalink)  
Antiguo 21/09/2009, 10:00
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Duda sobre función con número variable de argumentos

Cita:
Iniciado por lufe Ver Mensaje
Si sustituyo
def varios(param1, param2, *otros):


por
def varios(*argv): print argv

me da

for val in varios:
^
SyntaxError: mismatched input '' expecting EOF
Ojo las funciones no son iterables: Seria algo mas o menos asi

Código python:
Ver original
  1. def varios(param1, param2, *otros): print otros
  #7 (permalink)  
Antiguo 21/09/2009, 13:11
Avatar de lufe  
Fecha de Ingreso: mayo-2009
Mensajes: 294
Antigüedad: 14 años, 10 meses
Puntos: 15
Respuesta: Duda sobre función con número variable de argumentos

Gracias por las respuestas chicos!

Tema solucionado.

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:20.