我有一个函数 remove_it()
尝试删除一些数据,删除的数据被添加到集合 removed
中。主要逻辑是,如果有更多要删除,继续删除,我的代码如下所示:
removed = set()
prev_count = -1
while prev_count != len(removed):
prev_count = len(removed)
remove_it()
让我有点困扰的是 while
循环条件和下一行看起来非常相似。这是正常现象还是有更好的方法?
remove_it()
中的逻辑非常复杂:它检测一些图形结构拓扑,并且在每一轮删除之后拓扑都会发生变化,在删除完成之前我不知道它是如何变化的。
我正在考虑从 remove_it()
返回 bool 值来跟踪集合 removed
是否已更改。然后 while 循环就像
while remove_it():
pass
这对我来说也很奇怪。有没有更好的办法?
请您参考如下方法:
您的remove_it
函数有副作用,这会使程序更难阅读。您可以重写它,而不是修改全局 removed
变量,而是返回一组已删除的值。然后你可以重写循环:
removed = set()
while True:
removed_batch = remove_it()
if removed_batch:
removed += removed_batch
else:
break