2012-03-05 14 views
7

Tengo un script en el que estoy trabajando donde necesito aceptar varios argumentos y luego iterar sobre ellos para realizar acciones. Empecé por el camino de definir una función y usar * args. Hasta ahora tengo algo, como a continuación:¿Iterar más de * args?

def userInput(ItemA, ItemB, *args): 
    THIS = ItemA 
    THAT = ItemB 
    MORE = *args 

Lo que estoy tratando de hacer es conseguir los argumentos de args * en una lista que puedo iterar. Miré otras preguntas en StackOverflow y en Google, pero parece que no puedo encontrar una respuesta a lo que quiero hacer. Gracias de antemano por la ayuda.

+1

+1 me Don No sé por qué se votó negativamente. – CoffeeRain

+3

Configuración 'MORE = * args' le dará un error de sintaxis. '*' es el operador de desempaquetado iterable. El uso de 'MORE = args' (soltando el asterisco) debería proporcionarle lo que desea. –

Respuesta

10

Tho obtener su sintaxis precisa:

def userInput(ItemA, ItemB, *args): 
    THIS = ItemA 
    THAT = ItemB 
    MORE = args 

    print THIS,THAT,MORE 


userInput('this','that','more1','more2','more3') 

se quita el * delante de args en la asignación a MORE. Luego más se convierte en una tupla con el contenido de longitud variable de args en la firma de userInput

Salida:

this that ('more1', 'more2', 'more3') 

Como otros han dicho, es más habitual para tratar args como un iterable:

def userInput(ItemA, ItemB, *args):  
    lst=[] 
    lst.append(ItemA) 
    lst.append(ItemB) 
    for arg in args: 
     lst.append(arg) 

    print ' '.join(lst) 

userInput('this','that','more1','more2','more3') 

salida:

this that more1 more2 more3 
0
MORE = args 

O, directamente:

for arg in args: 
    print "An argument:", arg 
0

Si su pregunta es "¿cómo puedo iterar sobre args", entonces la respuesta es "de la misma manera que iterar sobre nada": for arg in args: print arg.

4
>>> def foo(x, *args): 
... print "x:", x 
... for arg in args: # iterating! notice args is not proceeded by an asterisk. 
...  print arg 
... 
>>> foo(1, 2, 3, 4, 5) 
x: 1 
2 
3 
4 
5 

edición: Véase también How to use *args and **kwargs in Python (Como referencia por Jeremy D y subhacom).

0

Sólo iterar sobre args:

def userInput(ItemA, ItemB, *args): 
    THIS = ItemA 
    THAT = ItemB 
    for arg in args: 
     print arg 
Cuestiones relacionadas