2016-08-26 132 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

学到了很多!谢谢! –