我目前正在学习python 3.9的graphlib。我想生成一个CycleError,但是当我运行以下代码时:
#!/usr/bin/python3
from graphlib import TopologicalSorter
ts = TopologicalSorter()
ts.add(2, 1)
ts.add(3, 2)
ts.add(4, 3)
ts.add(1, 4)
ts.static_order()
我没有得到CycleError。但是如果我像这样修改代码:
#!/usr/bin/python3
from graphlib import TopologicalSorter
ts = TopologicalSorter()
ts.add(2, 1)
ts.add(3, 2)
ts.add(4, 3)
ts.add(1, 4)
tuple(ts.static_order()) # why does this work with tuple or list ?
为什么?
TopologicalSorter.static_order()
是生成器;函数体中包含yield
语句,则函数调用的返回值为iterator。
函数体不会执行之前的第一次尝试提取元素的迭代器。