2010-10-18 62 views
30

我一直在尋找傳遞數組或列表,因爲Python傾向於將它們稱爲函數。傳遞數組/列表到Python

我讀一些有關使用*指定參數時,如:

def someFunc(*args) 
    for x in args 
     print x 

但不知道這是否是正確/錯誤。沒有什麼似乎符合我的要求。我習慣於能夠輕鬆地將數組傳遞給PHP函數,這讓我感到困惑。它也似乎我不能做到這一點:由於它拋出了一個錯誤

def someFunc(*args, someString) 

我想我已經讓自己完全困惑,並尋找某人爲我清除它。

+1

http://docs.python.org/tutorial/controlflow.html#arbitrary-argument-lists簡要說明使用星號的詳細信息。這意味着你可以傳遞任意數量的參數,並且它們將被封裝在一個元組中(可以像函數中的列表那樣訪問)。帶星號的參數名稱必須最後一次,以便Python知道哪個是哪個名稱。 – JAL 2010-10-18 16:18:20

+0

「正如Python傾向於稱之爲」?這不是一種「傾向」。這是一個定義問題。 – 2010-10-18 17:48:54

+5

S.洛特冷靜下來!我認爲你在那裏有點苛刻 - 有沒有評論在談話中增加了什麼?沒有。 – 2010-10-18 18:49:17

回答

41

當您使用此語法定義函數:

def someFunc(*args) 
    for x in args 
     print x 

你告訴它你期望可變數目的參數。如果你想在一個列表傳遞(其他語言的陣列)你會做這樣的事情:

def someFunc(myList = [], *args) 
    for x in myList: 
     print x 

然後你可以用這個稱呼它:

items = [1,2,3,4,5] 

someFunc(items) 

您需要定義命名參數在變量參數之前,以及關鍵字參數前的變量參數。你也可以有這樣的:

def someFunc(arg1, arg2, arg3, *args, **kwargs) 
    for x in args 
     print x 

這至少需要三個參數,並支持其它參數和關鍵字參數變量的數字。

+8

小心使用可變對象作爲默認參數! def someFunc(myList = []): myList.append(1) someFunc在沒有參數的情況下調用兩次將返回[1,1],因爲默認參數只在構造函數定義時被構造一次。 – 2010-10-18 16:16:13

13

您可以通過列表就像其他類型:

l = [1,2,3] 

def stuff(a): 
    for x in a: 
     print a 


stuff(l) 

這將打印列表L。請記住,列表不會作爲深層副本傳遞。

+1

@ S.Lott:是的。我的意思是深刻的複製......感謝你的支持。 – JoshD 2010-10-18 20:28:23

4

您不需要使用星號來接受列表。

時,只需提供參數名稱的定義,並以列表傳似

def takes_list(a_list): 
    for item in a_list: 
     print item 
7

Python列表(它們不只是數組,因爲它們的大小可以隨時更改)是普通的Python對象,可以作爲任何變量傳遞給函數。 *語法用於解包列表,這可能不是您現在想要做的事情。