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

  • 相关阅读:
    Spring自定义注解简单使用四步走
    关于Mybaits映射一点心得
    设置UIButton文字大小颜色不同
    AFNetworking上传文件
    解决UITableView头部空白
    iOS获取文件和文件夹大小
    编译ffmpeg(iOS)
    让MySql支持Emoji表情
    MySQL重置密码(OSX)
    iOS多线程总结
  • 原文地址:https://www.cnblogs.com/2bjiujiu/p/9142006.html
Copyright © 2011-2022 走看看