1

我想从迭代器创建一个set,等。list不幸的是,它们的构造函数需要可迭代而不是迭代器。我不想创建一个很快就会被丢弃的可迭代对象。

当然,我可以简单地使用列表或集合理解,它可以精确地做我想要的(以及更多)。但是,它们的语法是特殊的。所以当我试图写一个函数时:

def create_from_gen(container_type, generator):
  return container_type(generator)

我被困。对于用户定义的容器,我当然可以定义自己的构造函数;对于库和内置类型,我别无选择。我可以检查listand set,并使用我认为的特殊语法,但这很难看。

4

2 回答 2

4

迭代器也是一个可迭代对象。它应该总是有一个__iter__返回自身的方法。这是Python中迭代器规范的一部分。

因此,只需将您的迭代器传递给listorset构造函数,它应该可以正常工作。

于 2012-12-15T02:45:47.620 回答
3

所有迭代器都是可迭代的。“可迭代”的定义是可以从中创建迭代器。

>>> list(iter((1, 2, 3)))
[1, 2, 3]
于 2012-12-15T02:45:57.900 回答