我有一个不包含循环的方法。我将列表传递给该方法。我为每个代码段分配了一个新值:
def do_paging(pageable_list):
pageable_list = pageable_list[start:end]
在主叫代码中:
do_paging(source_list)
但看起来source_list
似乎没有变化。如果我从pageable_list
返回do_paging()
,一切都很棒。数组参数是不可变的吗?
我开始返回值,因为它更好。但我很惊讶,想知道发生了什么。
编辑 - 我怎么可能编程Python一年而且不知道这个!
答案 0 :(得分:5)
切片正在创建一个新列表:
$query = mysqli_query($conn, "insert ignore into macadd (mac)
select volley.mac from volley
inner join savedemail on savedemail.email = volley.email");
您没有改变原始列表:
>>> a = [1,2,3]
>>> b = a[1:2]
>>> a is b
False
此外,对于您在>>> a
[1, 2, 3]
函数中为名称pageable_list
指定的列表,您永远不会做任何事情。
所以问题是a)你没有修改原始列表和/或b)你没有从你的功能中返回任何东西。使代码工作的一种方法是创建切片并将名称do_paging
重新分配给函数的返回值,即:
pageable_list
该函数也应该采用def do_paging(pageable_list, start, end):
return pageable_list[start:end]
pageable_list = do_paging(pageable_list, start, end)
和start
个参数,寻找全局空间中的那些是丑陋的。
但是,如果所有你需要的功能都是切片,那么这个功能并没有用,你只需要使用这行
end
答案 1 :(得分:3)
当我最近审核code from Quantopian并且以前从未使用过时,我注意到了这种方法。根据@Steven_Rumbalski的评论,这会将切片分配回输入变量pageable_list
。
def do_paging(pageable_list, start, end):
pageable_list[:] = pageable_list[start:end]
a = [1, 2, 3, 4, 5]
do_paging(a, 2, 4)
>>> a
[3, 4]
答案 2 :(得分:2)
您没有更改“列表”。您正在为本地变量分配新值。
改变列表本身是可行的:
def do_paging(pageable_list):
pageable_list.pop()
但变量pageable_list
仅仅是一个局部变量,并为其分配一些新值不会修改先前分配给它的值。