2012-03-05 18 views
7

Ho uno script su cui sto lavorando dove devo accettare più argomenti e quindi scorrere su di essi per eseguire azioni. Ho iniziato il percorso di definizione di una funzione e utilizzo di * args. Finora ho qualcosa di simile di seguito:Iterate su * args?

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

Quello che sto cercando di fare è ottenere gli argomenti da args * in una lista che posso iterare su. Ho esaminato altre domande su StackOverflow e su Google, ma non riesco a trovare una risposta a ciò che voglio fare. Grazie in anticipo per l'aiuto.

+1

+1 I don so perché sei stato svalutato. – CoffeeRain

+3

L'impostazione 'MORE = * args' ti darà un errore di sintassi. '*' è l'operatore di disimballaggio iterabile. Usare 'MORE = args' (lasciando cadere l'asterisco) dovrebbe farti ottenere quello che vuoi. –

risposta

10

Tho ottenere il vostro preciso sintassi:

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

    print THIS,THAT,MORE 


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

si rimuove il * davanti a args nell'assegnazione a MORE. Poi PIÙ diventa una tupla con il contenuto di lunghezza variabile del args nella firma di userInput

uscita:

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

Come altri hanno detto, è più usuale per trattare args come iterabile:

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') 

uscita:

this that more1 more2 more3 
0
MORE = args 

Oppure, direttamente:

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

Se la tua domanda è "come faccio a iterare args", allora la risposta è "allo stesso modo di eseguire iterazioni su nulla": 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 

edit: Vedi anche How to use *args and **kwargs in Python (come riferito da Jeremy D e subhacom).

0

Proprio iterare args:

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