reversed
。reversed
。reversed
。reversed
。为什么我可以在列表和range_iterator上而不是在list_iterator或itertools迭代器上调用reversed
?
>>> reversed(itertools.accumulate(reversed(x), lambda x, y: x + y))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'itertools.accumulate' object is not reversible
答案 0 :(得分:1)
如果您read the docs,您会看到reversed
适用于具有以下特征的任何对象:
具有
__reversed__()
方法或支持序列协议(__len__()
方法和带有整数的__getitem__()
方法 以0
开头的参数)
请注意,这意味着不能在range_iterator上使用reversed
,但可以在常规range
对象上使用。
>>> reversed(iter(range(10)))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'range_iterator' object is not reversible
>>> reversed(range(10))
<range_iterator object at 0x105bcac90>
还请注意,您通常根本无法反转迭代器,它是类似序列的可迭代对象,通常是可逆的。或通过魔术方法钩子__reversed__()
支持它的任何东西,并且迭代器通常都没有(通常仅支持__iter__
和__next__
)