本系列将会陆续整理分享一些的Python内置函数。
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/11x9_wCZ3yiYOe5nVcRk2CQ?pwd=mnsj
提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Python_built-in_functions
reversed(seq)
-
参数说明:
-
seq:必须是一个实现了__reversed__()方法的对象,或者是一个支持序列协议的对象。
-
返回值:
如果一个对象实现了__reversed__()
方法,那么reversed()
函数会直接调用这个方法来生成逆序迭代器。__reversed__()
方法是一个特殊方法,用于提供对象的逆序访问方式。Python的内置类型(如列表和元组)都实现了__reversed__()
方法。
如果对象没有实现__reversed__()
方法,但支持序列协议,那么reversed()
也可以使用。序列协议包括以下两个方法:
-
__len__()
方法
:返回对象的长度。 -
__getitem__()
方法
:支持通过整数索引访问元素。
如果一个对象同时支持这两个方法,reversed()
函数会通过以下方式生成逆序迭代器:
-
使用
__len__()
方法
获取对象的长度。 -
从最后一个索引(
len - 1
)开始,逐个调用__getitem__()
方法,直到索引为 0。
下面是一些使用 reversed() 函数的示例:
-
示例 1:基本使用
# 反转列表
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'
# 反转元组
my_tuple = (10, 20, 30, 40)
reversed_tuple = tuple(reversed(my_tuple))
print(reversed_tuple) # 输出:(40, 30, 20, 10)
# 在 for 循环中使用
my_list = [1, 2, 3, 4, 5]
for item in reversed(my_list):
print(item)
# 输出:
# 5
# 4
# 3
# 2
# 1
-
示例 2:实现 __reversed__() 方法
自定义对象如果实现了__reversed__()方法,那么reversed()函数会直接调用该方法来生成逆序迭代器。__reversed__()方法应该返回一个迭代器,该迭代器按顺序返回对象的元素,但顺序是相反的。
class MySequence:
def __init__(self, data):
self.data = data
# 实现了__reversed__()方法
def __reversed__(self):
return iter(self.data[::-1])
# 创建一个对象
seq = MySequence([10, 20, 30, 40])
# 使用 reversed()
list(reversed(seq))
# 输出:[40, 30, 20, 10]
-
示例 3:支持序列协议
如果对象没有实现__reversed__()方法,但实现了序列协议(即__len__()和__getitem__()),reversed()函数将使用这些方法来创建一个反转迭代器。其中,__len__()
方法返回序列的长度,而__getitem__()
方法接受从0开始的整数索引并返回对应的元素。
class MySequence:
def __init__(self, data):
self.data = data
# __len__()方法
def __len__(self):
return len(self.data)
# __getitem__方法
def __getitem__(self, index):
return self.data[index]
# 创建一个对象
seq = MySequence([10, 20, 30, 40])
# 使用 reversed()
list(reversed(seq))
# 输出:[40, 30, 20, 10]


本篇文章来源于微信公众号: 码农设计师