我想从迭代器创建set
,list
等。不幸的是,它们的构造函数需要迭代而不是迭代器。我不想创建一个很快就会被丢弃的迭代。
当然,我可以简单地使用列表或设置理解,这可以完全符合我的要求(以及更多)。但是,它们的语法是特殊的。所以当我尝试写一个函数时:
def create_from_gen(container_type, generator):
return container_type(generator)
我卡住了。对于用户定义的容器,我当然可以定义自己的构造函数;对于图书馆和内置类型我别无选择。我可以检查list
和set
,并使用我想的特殊语法,但这很难看。
答案 0 :(得分:4)
迭代器也是一个可迭代的对象。它应始终具有返回自身的__iter__
方法。这是Python中the specification for iterators的一部分。
所以只需将迭代器传递给list
或set
构造函数,它应该可以正常工作。
答案 1 :(得分:3)
所有迭代器都是可迭代的。 " iterable"的定义是可以从它创建一个迭代器。
>>> list(iter((1, 2, 3)))
[1, 2, 3]