python - 逐渐从函数列表中调用函数(没有生成器)
问题描述
我在启用刽子手列表中的功能时遇到问题。这是问题代码示例 - 由于其长度而缩写:
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 改变整个电路板?
解决方案
您正在函数中传递对同一列表的引用。这意味着,您修改的列表func()
与在其他函数中修改的列表相同。
您可以创建列表的副本,以便在每个步骤之后保留列表的副本。您可以使用切片表示法来实现这一点:
f1 = func(board[:])
f2 = func2(f1[:])
f3 = func3(f2[:])
或list()
内置:
f1 = func(list(board))
f2 = func2(list(f1))
f3 = func3(list(f2))
这样f1
,f2
和f3
将各自持有对不同列表的引用。
推荐阅读
- excel - 如何将所有单元格的数字格式更改为“常规”?
- c# - Asp.Net MVC 自定义子域路由不工作
- python - 如何使用文件路径变量保存图像文件?
- kotlin - build.gradle.kts 中的外部化任务
- excel - Excel:带有 IF/CASE 语句的 Rank.AVG
- java - 如何从 Spring 控制器返回视频?
- redis - 使用 RedisGraph 查找 2 个节点之间的最短路径
- monitoring - Prometheus - 如何从范围查询中过滤掉过时的指标?
- docker - 在 WSL 上运行 Docker 未执行“RUN”指令,也未正确构建
- c++ - 计算向量中的元素数量