在 Python 中,reversed()函数返回一个反转的迭代器,用于反转序列(例如列表、元组、字符串等)中的元素。

函数语法

reversed(seq)

参数:

  • seq:要反转的序列,任何实现了__reversed__()方法的对象,或任何实现了__len__()__getitem__()方法的对象;

reversed()函数返回一个反向的迭代器对象;

内部实现

  1. 首先尝试调用__reversed__()方法,有则返回结果;
  2. 如果没有__reversed__(),则检查是否有__len__()__getitem__(),有则构造一个新的反向迭代器并返回;
  3. 都没有则抛出TypeError异常;

用法示例

基本用法:

my_list = [1, 2, 3, 4, 5]
reversed_list = list(reversed(my_list))
print(reversed_list)  # [5, 4, 3, 2, 1]

my_string = "hello"
reversed_string = ''.join(reversed(my_string))
print(reversed_string)  # olleh

不支持不可逆的对象,这些不可逆对象未实现特殊方法:

a = 3.14
# reversed(a) # TypeError: 'float' object is not reversible
print(hasattr(a,'__reversed__')) # False
print(hasattr(a,'__len__')) # False

自定义__reversed__()方法:

class CountDown:
    def __init__(self, start):
        self.start = start
    
    def __iter__(self):
        n = self.start
        while n > 0:
            yield n
            n -= 1
    
    def __reversed__(self):
        n = 1
        while n <= self.start:
            yield n
            n += 1

cd = CountDown(5)
print("正向:", list(cd))  # [5, 4, 3, 2, 1]
print("反向:", list(reversed(cd)))  # [1, 2, 3, 4, 5]