Skip to main content
 首页 » 编程设计

python之为什么我不能更改方法中的列表

2025年05月04日8sky-heaven

我有一个不包含循环的方法。我将一个列表传递给该方法。我根据此代码段为列表分配了一个新值:

def do_paging(pageable_list): 
    pageable_list = pageable_list[start:end] 

在调用代码中:

do_paging(source_list) 

但它看起来不像是 source_list 被改变了。如果我从 do_paging() 返回 pageable_list 一切都很好。数组参数是不可变的吗?

我开始返回值,因为它更好。但我很惊讶,想知道这是怎么回事。

编辑 - 我怎么可能已经编写了一年的 Python 而不知道这一点!

请您参考如下方法:

切片正在创建一个新列表:

>>> a = [1,2,3] 
>>> b = a[1:2] 
>>> a is b 
False 

您没有改变原始列表:

>>> a 
[1, 2, 3] 

此外,您永远不会对您在 do_paging 函数中分配名称 pageable_list 的列表做任何事情。

所以问题是 a) 你没有修改原始列表和/或 b) 你没有从你的函数返回任何东西。使代码工作的一种方法是创建切片并将名称 pageable_list 重新分配给函数的返回值,即:

def do_paging(pageable_list, start, end): 
    return pageable_list[start:end] 
 
pageable_list = do_paging(pageable_list, start, end) 

该函数可能还应该采用 start 和 end 参数,在全局空间中寻找它们有点难看。

但是,如果你需要你的函数做的只是切片,这个函数就没什么用了,你可以只使用这条线

pageable_list = pageable_list[start:end]