我想将生成器或迭代器转换为递归列表.
我在下面编写了一个代码,但它看起来很幼稚和丑陋,可能会在doctest中删除.
Q1.帮帮我好版本.
Q2.如何指定对象是不可变的?
import itertools
def isiterable(datum):
return hasattr(datum, '__iter__')
def issubscriptable(datum):
return hasattr(datum, "__getitem__")
def eagerlize(obj):
""" Convert generator or iterator to list recursively.
return a eagalized object of given obj.
This works but, whether it return a new object, break given one.
test 1.0 iterator
>>> q = itertools.permutations('AB', 2)
>>> eagerlize(q)
[('A', 'B'), ('B', 'A')]
>>>
test 2.0 generator in list
>>> q = [(2**x for x in range(3))]
>>> eagerlize(q)
[[1, 2, 4]]
>>>
test …Run Code Online (Sandbox Code Playgroud)