2016-08-26 108 views
1

我想使用python基本庫編碼「1024」。在這個過程中,我嘗試將一個列表[0,2,4,4]變成[0,2,8,0]。所以這是我的測試代碼。這非常簡單。python函數如何改變參數而不是形式參數?

def merger(a, b): 
     if a == b: 
     a += b 
     b = 0 


    numlist = [0, 2, 4, 4] 
    merger(numlist[0], numlist[1]) 
    merger(numlist[1], numlist[2]) 
    merger(numlist[2], numlist[3]) 
    print (numlist) 

所以當我嘗試進行合併。我期待輸出[0,2,8,0]。但是,它給了我[0,2,4,4]。我想也許是因爲我只是改變了函數的局部變量a b而不是實際的參數?但是,如果我想要發生這種情況,我該怎麼辦?謝謝!

我想我一般都想知道如果我想要一個函數不會返回任何東西,而只是改變我作爲參數傳遞的變量的值。我怎樣才能實現它?

+0

你可以用'global a,b'引入全局變量。但是,這通常不被認爲是好的做法......通常,人們更喜歡使用'return'語句從函數中獲取值。 – nostradamus

+0

@nostradamus:是的,避免修改全局變量是很好的做法,但'global'對於OP的代碼沒有幫助。 –

+0

哦,這很有趣。謝謝! –

回答

2

,可以在列表和索引傳遞給函數:

def merger(l, a, b): 
    if l[a] == l[b]: 
     l[a] += l[b] 
     l[b] = 0 

numlist = [0, 2, 4, 4] 
merger(numlist, 0, 1) 
merger(numlist, 1, 2) 
merger(numlist, 2, 3) 
print(numlist) 

由於列表對象將通過引用傳遞,並在函數內部列表上的任何變化將是函數調用後生效。

+0

學到了很多!謝謝! –