2011-08-02 35 views
16

Vấn đề của tôi là tôi có các giá trị trong danh sách. Và tôi muốn tách các giá trị này và gửi chúng như một tham số riêng biệt.Cách tách danh sách và chuyển chúng thành tham số riêng biệt?

Mã của tôi là:

def egg(): 
    return "egg" 

def egg2(arg1, arg2): 
    print arg1 
    print arg2 

argList = ["egg1", "egg2"] 
arg = ', '.join(argList) 

egg2(arg.split()) 

dòng mã này (egg2(arg.split())) không làm việc, nhưng tôi muốn biết nếu nó có thể gọi một số được xây dựng trong chức năng đó sẽ tách ra các giá trị từ danh sách và do đó sau đó chúng tôi có thể gửi chúng dưới dạng hai tham số khác nhau. Tương tự như egg2(argList[0], argList[1]), nhưng phải được thực hiện động, để tôi không phải nhập đối số liệt kê rõ ràng.

+2

thể trùng lặp của [Vượt qua mỗi phần tử của một danh sách để một hàm mang theo nhiều tranh cãi trong Python?] (Http: // stackoverflow .com/questions/3558593/pass-each-element-of-a-list-to-a-function-that-take-nhiều-đối số-trong-python) –

Trả lời

37
>>> argList = ["egg1", "egg2"] 
>>> egg2(*argList) 
egg1 
egg2 

Bạn có thể sử dụng * args (đối số) và ** kwargs (đối số từ khóa) khi gọi hàm. Hãy xem this blog về cách sử dụng nó đúng cách.

0

arg.split() không chia danh sách theo cách bạn muốn bởi vì tách mặc định không phù hợp với bạn:

In [3]: arg 
Out[3]: 'egg1, egg2' 

In [4]: arg.split() 
Out[4]: ['egg1,', 'egg2'] 

In [5]: arg.split(', ') 
Out[5]: ['egg1', 'egg2'] 

Từ the docs (nhấn mạnh thêm):

Nếu không được chỉ định hoặc là None , một thuật toán tách khác nhau được áp dụng: các khoảng trắng liên tiếp được coi là một dấu tách đơn và kết quả sẽ không chứa các chuỗi rỗng ở đầu hoặc cuối nếu chuỗi có khoảng trắng đầu hoặc cuối.

+0

Nó không phải là ngay lập tức rõ ràng với tôi rằng điều này giải quyết vấn đề cơ bản , đó là 'trứng2' yêu cầu hai đối số, nhưng bất kỳ biến thể nào trên' ['egg1', 'egg2'] là một đối số trừ khi được toán tử '*' đứng trước. – senderle

1

Có nhiều cách có thể tốt hơn, nhưng bạn có thể làm:

argList = ["egg1", "egg2"] 
(a, b) = tuple(argList) 
egg2(a, b) 
Các vấn đề liên quan