首页Python【Python内置函数】r...

【Python内置函数】reversed()函数

Python 提供了许多内置函数,这些函数是Python语言的一部分,可以直接在Python程序中使用而无需导入任何模块。

本系列将会陆续整理分享一些的Python内置函数。

文章配套代码获取有以下两种途径:
  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/11x9_wCZ3yiYOe5nVcRk2CQ?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Python_built-in_functions





01
简介

reversed()函数用于返回一个可迭代对象的逆序迭代器。只有支持顺序访问的可迭代对象(如列表、元组、字符串等)才能使用,不支持集合或字典等无序类型。
该函数不会直接修改原对象,而是返回一个新的迭代器,该迭代器可以按倒序访问原对象中的元素。

reversed() 函数的基本语法如下:

reversed(seq)
  • 参数说明:
  • seq:必须是一个实现了__reversed__()方法的对象,或者是一个支持序列协议的对象。
  • 返回值:

reversed() 函数返回一个逆序迭代器。由于返回的是一个迭代器,因此它只能被遍历一次。如果需要多次访问反转后的序列,可以将迭代器转换为列表或其他可重复访问的数据结构,例如使用list()tuple()

  • 底层原理:

如果一个对象实现了__reversed__()方法,那么reversed()函数会直接调用这个方法来生成逆序迭代器。__reversed__()方法是一个特殊方法,用于提供对象的逆序访问方式。Python的内置类型(如列表和元组)都实现了__reversed__()方法。

如果对象没有实现__reversed__()方法,但支持序列协议,那么reversed()也可以使用。序列协议包括以下两个方法:

  • __len__()方法:返回对象的长度。

  • __getitem__()方法:支持通过整数索引访问元素。

如果一个对象同时支持这两个方法,reversed()函数会通过以下方式生成逆序迭代器:

  • 使用__len__()方法获取对象的长度。

  • 从最后一个索引(len - 1)开始,逐个调用__getitem__()方法,直到索引为 0。

02
使用

下面是一些使用 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]


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

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments