Python 没有内置的 OutputIterator 等价物。特别是,内置或标准库容器不支持任何允许客户端代码在不知道特定容器类型的情况下向它们发送数据的通用接口。
根据@Steven Rumbalski 的评论和@Glenn Maynard 的回答,这通常不是问题,因为在 C++ 中将采用 OutputIterator 参数的函数在 python 中将被简单地编写为生成器。
通常,我使用生成器没有问题,并且从不觉得我需要 Python 中的 OutputIterator。但是,在这种情况下,我被卡住了。
我正在用 Python 重新实现 Boost Graph Library 中的一些算法。一个典型的图遍历算法,比如说depth_first_search
,将“访问者”对象作为参数。访问者本质上是一组回调函数,当遍历算法在其执行过程中遇到不同的事件(例如,发现新顶点、检查边等)时,它会调用这些回调函数。在 C++ 中,我可以让这些回调函数中的一个或多个将数据发送到访问者对象在其初始化时从客户端代码获得的 OutputIterator 对象。(例如,这正是topological_sort
实现的方式:它接受一个 OutputIterator,将其传递给一个dfs_visitor
对象,然后访问者对象“监视”事件finished_vertex
并将它接收到的顶点发送到指定的OutputIterator。当然,更复杂的情况需要多个 OutputIterator 对象和多个回调函数。)
如何使用 Python 生成器实现相同的目标?
我需要以某种方式以生成器“样式”将数据从depth_first_search
多个指定的数据消费者发送。我只是不知道该怎么做。(我使用的是 Python 3.3。)