函数为什么不更改其参数?

时间:2019-09-28 15:50:31

标签: python

def func(l):
    l = l + l
    return ()
lst = [22, 33, 13]
func(lst)
print(lst)

输出为[22, 33, 13]。为什么不是[22, 33, 13, 22, 33, 13]

4 个答案:

答案 0 :(得分:1)

在函数内,您使引用l指向新的列表对象l + l。外部引用lst仍指向原始列表对象。

如果函数改而修改了 list对象本身,例如通过附加到它,您将在函数结束后看到效果。

def func(l):
    l.append(42)
    print(l)
    return () # Not really needed.

lst = [22, 33, 13]
func(lst)
print(lst)

如果要获得所需的结果,请尝试使用列表extend方法。

def func(l):
    l.extend(l)

lst = [22, 33, 13]
func(lst)
print(lst) # prints [22, 33, 13, 22, 33, 13]

答案 1 :(得分:0)

尝试一下:

def func(l):
    l = l + l
    return l  # return l from function space.
lst = [22, 33, 13]
lst = func(lst) # need to update lst
print(lst)

答案 2 :(得分:0)

对于初学者,您的函数返回一个tuple,一个空的。它对您通过的列表没有任何作用。

在任何情况下,即使您修复了函数以实际返回列表的情况,您仍必须分配某些内容,如下所示:

def func(l):
    l = l + l
    return l

lst = [22, 33, 13]
new_lst  = func(lst)

print(lst)
print(new_lst)

>>[22, 33, 13]
>>[22, 33, 13, 22, 33, 13]

答案 3 :(得分:0)

在函数内部,在l = l + l行中,您基于作为参数传入的列表来创建新列表l ,并丢失在单行中引用作为参数传入的旧列表

您永远不会在函数外部修改列表(例如,可以通过使用appendextend方法来完成),并且永远不会在函数内部返回新列表,因此您不会函数执行完毕后,请查看所有更改。