在 Python 中,reversed()函数返回一个反转的迭代器,用于反转序列(例如列表、元组、字符串等)中的元素。
函数语法
reversed(seq)
参数:
seq:要反转的序列,任何实现了__reversed__()方法的对象,或任何实现了__len__()和__getitem__()方法的对象;
reversed()函数返回一个反向的迭代器对象;
内部实现
- 首先尝试调用
__reversed__()方法,有则返回结果; - 如果没有
__reversed__(),则检查是否有__len__()和__getitem__(),有则构造一个新的反向迭代器并返回; - 都没有则抛出
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]