在Python中,什么是循环?
我正在使用一个很棒的工具叫做 eric4 来编写Python代码。这个工具里有一个叫“cyclops”的功能,听说是用来查找代码中的循环的。运行这个工具后,它给我显示了一堆大大的红字,告诉我我的代码里有很多循环。问题是,这些输出信息几乎看不懂,我根本无法通过这些信息理解什么是循环。我在网上浏览了好几个小时,结果连一篇相关的博客文章都没找到。当循环数量达到一定程度时,性能分析器和调试器就会停止工作 :(。
我想问的是,什么是循环?我怎么知道自己在写循环?我该如何避免在Python中产生循环呢?谢谢。
2 个回答
1
Cyclops 主要告诉你的是,代码中是否有对象通过其他对象形成了自我引用的链条。以前在 Python 中,这个问题比较严重,因为垃圾回收器无法正确处理这些对象。不过现在这个问题大部分已经解决了。
简单来说:如果你没有发现内存泄漏,通常情况下你不需要太担心 Cyclops 的输出。
4
循环(或者叫“引用循环”)是指两个或更多的对象互相引用,比如:
alist = []
anoth = [alist]
alist.append(anoth)
或者
class Child(object): pass
class Parent(object): pass
c = Child()
p = Parent()
c.parent = p
p.child = c
当然,这些只是非常简单的例子,只有两个项目的循环;在现实生活中,循环通常更长,也更难发现。没有什么神奇的工具能告诉你你刚刚创建了一个循环——你只需要留意这一点。gc模块的主要工作就是清理那些无法到达的循环,它可以帮助你诊断现有的循环(当你设置了合适的调试标志时)。weakref模块可以帮助你在需要让子对象和父对象互相知道的情况下,避免创建循环引用(比如,可以把两个互相引用中的一个变成弱引用,或者使用这个模块提供的方便的弱字典容器)。