【发布时间】:2013-04-25 07:39:15
【问题描述】:
Python 没有内置的 OutputIterator 等价物;特别是,内置或标准库容器不支持任何允许客户端代码在不知道特定容器类型的情况下向它们发送数据的通用接口。
根据@Steven Rumbalski's comment 和@Glenn Maynard's answer,这通常不是问题,因为在 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。)
【问题讨论】:
标签: c++ python generics boost python-3.x