zoukankan      html  css  js  c++  java
  • Python-序列反转和序列反转协议-reversed __reversed__

    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协议则给自定义对象增强基本数据类型拥有的属性

  • 相关阅读:
    SQL 多条件查询
    android实现程序开机自启动
    SendMessage模拟按键所需的虚拟键码
    使用API进行文件读写——CreateFile,ReadFile,WriteFile等
    VB断点拷贝大文件(WIN7系统需要更改某个API函数,具体我也忘了)
    mysql
    webstorm
    ubuntu ftp服务器
    centos ftp 服务器
    nignx
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/9142006.html
Copyright © 2011-2022 走看看