2012-03-05 10 views
7

Mam skrypt, nad którym pracuję, w którym muszę zaakceptować wiele argumentów, a następnie iterować nad nimi, aby wykonać działania. Zacząłem od zdefiniowania funkcji i użycia * argumentów. Do tej pory mam coś jak poniżej:Iteracja ponad * argumenty?

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

Co staram się zrobić, to argumenty Od * args w liście, że mogę iteracyjnego. Przyjrzałem się innym pytaniom dotyczącym StackOverflow, a także Google, ale nie mogę znaleźć odpowiedzi na to, co chcę zrobić. Z góry dziękuję za pomoc.

+1

+1 I don Nie wiem, dlaczego zostałeś cenzurowany. – CoffeeRain

+3

Ustawienie 'MORE = * args' spowoduje błąd składni. '*' jest iteracyjnym operatorem rozpakowywania. Użycie 'MORE = args' (upuszczenie gwiazdki) powinno dać ci to, czego chcesz. –

Odpowiedz

10

Tho uzyskać precyzyjny składnię:

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

    print THIS,THAT,MORE 


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

usunąć * przed args w przypisaniu do MORE. Następnie WIĘCEJ staje krotki ze zmienną treścią długościach args w podpisaniu userInput

wyjściowa:

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

Jak inni stwierdzili, że jest bardziej zwykle w leczeniu args jako 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') 

wyjściowa:

this that more1 more2 more3 
0
MORE = args 

Lub bezpośrednio:

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

Jeśli pytanie brzmi „jak mogę iteracyjne nad args”, to odpowiedź brzmi „tak samo iteracyjne ponad wszystko”: 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: Zobacz również How to use *args and **kwargs in Python (wymieniona przez Jeremy D i subhacom).

0

Wystarczy iteracyjnego args:

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