首页 > 解决方案 > 逐渐从函数列表中调用函数(没有生成器)

问题描述

我在启用刽子手列表中的功能时遇到问题。这是问题代码示例 - 由于其长度而缩写:

board=[]#A matrix to which I append required letters

def func(list1):
    does sth with list1
    return list1

def func2(list2):
    does sth with list2
    return list2

def func3(list3):
    does sth with list3
    return list3

f1=func(board)
f2=func2(f1)
f3=func3(f2)

list_of_func=[f1, f2, f3]
count=0

if sth happens:
     print(list_of_func[count])
     count+=1

但是,它不会打印逐步修改的电路板,而是完全更改的电路板 - 已更改所有功能。如何阻止 Python 改变整个电路板?

标签: pythonlistfunction

解决方案


您正在函数中传递对同一列表的引用。这意味着,您修改的列表func()与在其他函数中修改的列表相同。

您可以创建列表的副本,以便在每个步骤之后保留列表的副本。您可以使用切片表示法来实现这一点:

f1 = func(board[:])
f2 = func2(f1[:])
f3 = func3(f2[:])

list()内置:

f1 = func(list(board))
f2 = func2(list(f1))
f3 = func3(list(f2))

这样f1f2f3将各自持有对不同列表的引用。


推荐阅读