Python reversed()函数
时间:2020-02-23 14:43:15 来源:igfitidea点击:
Python reversed()函数从指定的sequence参数返回一个反向迭代器。
python reversed()
Python reversed()函数语法为:
reversed(seq)
输入参数必须是一个序列,例如元组,列表,字符串等。
返回的对象是" reversed"类型,它是一个迭代器。
如果自定义对象具有__reversed __()方法或者支持序列协议,则可以将其作为reversed()函数参数提供。
我们需要使用从0开始的整数参数来实现__len __()方法和__getitem __()方法,以支持序列协议。
带序列的reversed()
让我们看一下带有标准序列对象(例如字符串,字节,元组,列表等)的reversed()函数示例。
def print_iterator(it): for x in it: print(x, end=' ') print('\n') # reversed string r = reversed('abc') print(type(r)) print(r) print_iterator(r) # reversed list r = reversed([1, 2, 3]) print_iterator(r) # reversed tuple r = reversed((1, 2, 3)) print_iterator(r) # reversed bytes r = reversed(bytes('abc', 'utf-8')) print_iterator(r) # reversed bytearray r = reversed(bytearray('abc', 'utf-8')) print_iterator(r)
输出:
<class 'reversed'> <reversed object at 0x109d1f208> c b a 3 2 1 3 2 1 99 98 97 99 98 97
请注意,在控制台上打印时,字节和字节数组元素将转换为整数。
具有具有__reversed__方法的对象的reversed()
# object with __reversed__ method class Data: name = '' def __init__(self, n): self.name = n def __reversed__(self): return reversed(self.name) d = Data('ABC') r = reversed(d) print_iterator(r)
输出:C B A
具有对象支持序列协议的reversed()
# object supporting sequence protocol i.e. # implementing __len__() and __getitem__ method class MyTupleWrapper: t = () def __init__(self, tu): if not isinstance(tu, tuple): return ValueError('Only accepts tuple') self.t = tu def __len__(self): return len(self.t) def __getitem__(self, index): return self.t[index] mt = MyTupleWrapper((1, 2, 3, 4)) r = reversed(mt) print_iterator(r)
输出:4 3 2 1