python函数如何实际更改参数而不是形式参数?

时间:2016-08-26 07:27:28

标签: python function syntax

我正在尝试使用python基本库编写“1024”代码。在这个过程中,我尝试将列表[0,2,4,4]变为[0,2,8,0]。所以这是我的测试代码。这很容易。

    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]。我想也许是因为我只是将我的函数的局部变量改为b而不是实际的参数?但如果我希望这种情况发生,我该怎么办? THX!

我想我一般都想知道我是否希望函数不返回任何东西,只是改变我作为参数传递的变量的值。我怎样才能实现它?

1 个答案:

答案 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)

由于列表对象将通过引用传递,函数内部列表上的任何更改都将在函数调用后生效。