reversed
将序列反转,依次把最后的元素放到第一个位置,把第一元素放到最后一个位置,变成生成器对象
name = "beimenchuixue"
print(next(reversed(name)))
names = ["北门吹雪", "七牛云", '博客园']
print(reversed(names).__next__())
__reversed__
对象中只要实现这个方法, reversed会调用对象中这个方法,从而实现对象中序列反转
class BeiMenChuiXue: def __init__(self, name): self.name = name # def __reversed__(self): # # 依靠 reversed函数实现 # return reversed(self.name) def _index_start(self): return len(self.name) - 1 # 自己实现一个迭代器 def __reversed__(self): index = self._index_start() while True: if index <= -1: raise StopIteration yield self.name[index] index -= 1 if __name__ == '__main__': name = BeiMenChuiXue("beimenchuixue") new_name = reversed(name) for value in new_name: print(value)
经验:
1. reversed把序列反转,最后生成生成器对象
2. 自定义对象中需要自己实现 __reversed__方法返回一个生成器函数对象,reversed()方法调用自定义对象中__reversed__魔法方法
3. 遵守Python协议则给自定义对象增强基本数据类型拥有的属性