def func(l):
l = l + l
return ()
lst = [22, 33, 13]
func(lst)
print(lst)
输出为[22, 33, 13]
。为什么不是[22, 33, 13, 22, 33, 13]
?
答案 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
,并丢失在单行中引用作为参数传入的旧列表。
您永远不会在函数外部修改列表(例如,可以通过使用append
或extend
方法来完成),并且永远不会在函数内部返回新列表,因此您不会函数执行完毕后,请查看所有更改。