2012-03-05 26 views
7

Tôi có một kịch bản tôi đang làm việc trên nơi tôi cần phải chấp nhận nhiều đối số và sau đó lặp lại chúng để thực hiện các hành động. Tôi bắt đầu xuống đường dẫn định nghĩa một hàm và sử dụng * args. Cho đến nay tôi có một cái gì đó như dưới đây:Lặp lại trên * args?

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

Những gì tôi đang cố gắng làm là có được các đối số từ args * vào một danh sách mà tôi có thể lặp lại. Tôi đã xem xét các câu hỏi khác trên StackOverflow cũng như trên Google nhưng tôi dường như không thể tìm thấy câu trả lời cho những gì tôi muốn làm. Xin được cảm ơn trước về sự giúp đỡ.

+1

+1 I don 't biết lý do tại sao bạn đã downvoted. – CoffeeRain

+3

Đặt 'MORE = * args' sẽ cho bạn một lỗi cú pháp. '*' là toán tử giải nén lặp lại được. Sử dụng 'MORE = args' (thả dấu sao) sẽ giúp bạn có được những gì bạn muốn. –

Trả lời

10

Thọ có được cú pháp chính xác của bạn:

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

    print THIS,THAT,MORE 


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

Bạn tháo * ở phía trước args trong nhiệm vụ gửi đến MORE. Sau đó THÊM trở thành một tuple với các nội dung độ dài thay đổi của args trong chữ ký của userInput

Output:

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

Như những người khác đã nói, nó là bình thường hơn để điều trị args như một 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') 

Đầu ra:

this that more1 more2 more3 
0
MORE = args 

Hoặc trực tiếp:

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

Nếu câu hỏi của bạn là "làm thế nào để lặp qua args", thì câu trả lời là "giống như cách bạn duyệt qua bất cứ điều gì": 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 

chỉnh sửa: Xem thêm How to use *args and **kwargs in Python (Như tham chiếu bởi Jeremy D và subhacom).

0

Chỉ cần lặp qua args:

def userInput(ItemA, ItemB, *args): 
    THIS = ItemA 
    THAT = ItemB 
    for arg in args: 
     print arg 
Các vấn đề liên quan