2012-08-12 271 views
14

我是一個Python新手,並試圖將數組作爲參數傳遞給聲明列表/數組作爲參數的python函數。使用數組參數聲明一個python函數並將數組參數傳遞給函數調用?

我相信我聲明是錯誤的,

這裏有雲:

def dosomething(listparam): 
     #do something here 
dosomething(listargument) 

顯然,這是行不通的,我究竟做錯了什麼?

謝謝

+2

它應該工作。你能展示一些真實的代碼嗎? – stranac 2012-08-12 23:24:58

+1

你能提供一些更多的上下文,也許實際的代碼失敗? (如果可能,使其成爲[很好的例子](http://sscce.org/))。你說*聲明*是什麼意思? – phihag 2012-08-12 23:25:01

+0

哦,是的,這是絕對是我的壞...我這樣做: 爲範圍內的x(len(列表)): print x; 而不是打印列表[x] ...謝謝大家! – user1020069 2012-08-12 23:35:39

回答

19

你有什麼是在正確的軌道上。

def dosomething(thelist): 
    for element in thelist: 
     print element 

dosomething(['1','2','3']) 
alist = ['red','green','blue'] 
dosomething(alist) 

產生輸出:

1 
2 
3 
red 
green 
blue 

幾件事情要注意給您的評論上面:在C家族語言不同的是,你往往不需要與跟蹤指數打擾而迭代在列表中,除非索引本身很重要。如果你確實需要索引,你可以使用enumerate(list)獲得index,element對,而不是做x in range(len(thelist))跳舞。

+1

我想你的意思是'枚舉(列表)' – 2012-08-12 23:45:22

+0

哦,當然,我的不好。 – 2012-08-12 23:48:00

6

也許你想解開數組的元素,我不知道如果我得到它,但下面的例子:

def my_func(*args): 
    for a in args: 
     print a 

my_func(*[1,2,3,4]) 
my_list = ['a','b','c'] 
my_func(*my_list) 
3

我猜我不清楚什麼OP是真的要求..你想傳遞整個數組/列表並在函數內部對其進行操作嗎?或者你想在數組/列表中的每個值/項目上做同樣的事情。如果後者是你所希望的,我發現了一種運作良好的方法。

我更熟悉Fortran和C等編程語言,您可以在其中定義對陣列中每個元素進行操作的元素函數。我終於跟蹤到了與此相當的python,並認爲我會在這裏重新發布解決方案。關鍵是「矢量化」功能。這裏有一個例子:

def myfunc(a,b): 
    if (a>b): return a 
    else: return b 
vecfunc = np.vectorize(myfunc) 
result=vecfunc([[1,2,3],[5,6,9]],[7,4,5]) 
print(result) 

輸出:

[[7 4 5] 
[7 6 9]] 
相關問題